Как получить доступ к свойству переопределения 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)
}
Другие вопросы по тегам