Как получить доступ к свойству переопределения func tableView из метода prepareForSegue внутри того же класса
У меня есть два viewControllers. Первый - это tableViewController, а второй - webViewController. Я хочу передать данные с 1-го на 2-й виртуальный канал с помощью segue. По этой причине я хочу, чтобы значение "selectedCellIndex" из переопределенного функционала tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) подготовило метод ForSegue. Но я не могу получить доступ к значению selectedCellIndex из метода prepareForSegue. Пожалуйста помоги.
Класс NewsTableViewController: UITableViewController {
@IBOutlet var Alphacell: UITableView!
var chosenCellIndex = 0
//var temp = 0
var newspaper = ["A","B","C"]
override func viewDidLoad() {
super.viewDidLoad()
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return newspaper.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Alphacell", forIndexPath: indexPath) as UITableViewCell
cell.textLabel?.text = newspaper[indexPath.row]
// Alphacell.tag = indexPath.row
//Alphacell.addTarget(self, action: "buttonClicked:",forControlEvents: UIControlEvents.TouchUpInside)
return cell
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
chosenCellIndex = indexPath.row
//println(chosenCellIndex)
// Start segue with index of cell clicked
//self.performSegueWithIdentifier("Alphacell", sender: self)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let secondViewController = segue.destinationViewController as WebViewController
secondViewController.receivedCellIndex = chosenCellIndex
println(chosenCellIndex)
}
}
3 ответа
Чтобы получить выбранный индекс ячейки, вам нужно получить indexpath для выбранной строки, затем вам нужно получить индекс раздела или строки из indexpath.
Посмотрите код ниже для получения индекса строки
let indexPath = tableName.indexPathForSelectedRow
let section = indexPath?.section
let row = indexPath?.row
Убедитесь, что вы установили идентификатор в переходе к раскадровке, а затем выполните:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "someIdentifier"{
let secondViewController = segue.destinationViewController as? WebViewController
//Also, make sure this is the name of the ViewController you are perfoming the segue to.
secondViewController.receivedCellIndex = chosenCellIndex
print(chosenCellIndex)
}
}
Кроме того, какую версию Xcode и Swift вы используете? println() теперь просто print().
Лучший способ сделать это из функции выбора строки, этот пример
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let objects = newspaper[indexPath.row]
let vc = storyboard.instantiateViewControllerWithIdentifier("someViewController") as! UIViewController
vc.someString = objects.title
self.presentViewController(vc, animated: true, completion: nil)
}
и подготовить для использования этого кода:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let path = self.tableView.indexPathForSelectedRow()!
segue.destinationViewController.detail = self.detailForIndexPath(path)
}