передача данных через segue с помощью didSelectRowAt - PullRequest
0 голосов
/ 02 марта 2019

Я хочу передать данные через segue из UITableViewController в ViewController.Проблема заключается в том, что данные, которые я хочу передать indexPath.row (т. Е. Строка, выбранная в UITableView).

Я объявил объявленную переменную var counter: Int? в ViewController, которая известна как foodinfo,Это мой код в UITableView:

var rowselected: Int?

override func viewDidLoad() {
    super.viewDidLoad()

}

//what happens when row is selected
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    rowselected = indexPath.row

    func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let destinationVC = segue.destination as! foodinfo
        destinationVC.counter = rowselected
    }

    self.performSegue(withIdentifier: "dayx", sender: self)
    }

по какой-то причине counter в ViewController имеет значение nil.что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

prepareForSegue должно быть за пределами didSelectRowAt и не нужно объявлять переменную, которую вы можете использовать sender

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {  
    self.performSegue(withIdentifier: "dayx", sender:indexPath.row)
}      
func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let destinationVC = segue.destination as! foodinfo
    destinationVC.counter = sender as! Int
}
0 голосов
/ 02 марта 2019

Ваш prepare for segue не должен быть внутри override func tableView( переместить его так, как это:

 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

rowselected = indexPath.row
self.performSegue(withIdentifier: "dayx", sender: self)

}

также следует переопределить:

   override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
     if segue.identifier == "dayx" {
    let destinationVC = segue.destination as! foodinfo
    destinationVC.counter = rowselected
    }
}

, потому что override func prepareForSegue методвызывается после self.performSegue.Так что теперь вы можете успешно установить значение rowSelected = indexPath.row внутри override func tableView( и при вызове self.performSegue он будет правильно передавать данные, как установлено в override func prepareForSegue

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...