2016-10-18 2 views
0

У меня есть текст в ячейках таблицы, на который вы нажмете на него, вы передадите имя ячейки, а также вы будете переведены в другое представление.Не могу передать значение другому viewController?

 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    tableView.deselectRow(at: indexPath as IndexPath, animated: true) 

    let row = indexPath.row 
    valueToPass = sections[row] 
    print(valueToPass) 
} 


override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    if (segue.identifier == "fromWelcomeToSectionPage") { 
     // initialize new view controller and cast it as your view controller 
     let vc:sectionPage = segue.destination as! sectionPage 
     vc.passedValue = valueToPass 

    } 
} 

также я создал код в другой контроллер для проверки

if passedValue == "Základy" { 
     print("it works") 
    } 

Это, как я пытаюсь передать его. Переменная valueToPass - глобальная переменная. Idk, но когда я печатаю его в файле didSelectRowAtIndexPath, он выключен, но при подготовке это нуль.
После нажатия на ячейку я получил неожиданно нашел ноль, а разворачивание необязательное значение

Вот как я создал переменную в другой точке зрения

var passedValue = String() 
+2

'valueToPass = vc.passedValue' должен быть' vc.passedValue = valueToPass' – dan

+0

Кроме того, ваш метод делегата tableview использует подпись из более старой версии swift, и ваша подготовка к методу segue использует подпись Swift 3. Они оба вызваны? – dan

+0

Возможный дубликат [Передача данных между контроллерами просмотров] (http://stackoverflow.com/questions/5210535/passing-data-between-view-controllers) –

ответ

1

Ваш метод prepareForSegue вызывается перед методом didSelectRowAt, так вы не можете полагаться на какую-либо логику, которую вы делаете в didSelectRow, чтобы помочь передать данные.

Вы можете получить выбранную строку в prepareForSegue и использовать его там, чтобы получить данные и передать его:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    if (segue.identifier == "fromWelcomeToSectionPage") { 
     // initialize new view controller and cast it as your view controller 
     let vc = segue.destination as! sectionPage 
     let selectedRow = tableView.indexPathForSelectedRow!.row 
     vc.passedValue = sections[selectedRow] 
    } 
} 
+0

спасибо :) работает – patrikbelis

Смежные вопросы