значение равно нулю при передаче данных другому контроллеру представления в swift - PullRequest
0 голосов
/ 20 февраля 2019

Вот мой код. Предполагается, что данные имени пользователя передаются в другой контроллер представления, но когда я печатаю значения, в функции funFor prepareSegue значение равно нулю, может кто-нибудь сказать мне, где я допустил ошибку, я думаю, что это простопропущена мелочь, заранее спасибо за ответы.

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

    // Get Cell Label
    let indexPath = tableview.indexPathForSelectedRow!
    let currentCell = tableview.cellForRow(at: indexPath)! as! UserTableViewCell

    valueToPass = currentCell.nameLabel.text
    print(valueToPass)
    performSegue(withIdentifier: "Profile", sender: self)



}
// Pass data part...
func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){

    if (segue.identifier == "Profile") {
    let viewController = segue.destination as! UserProfileViewController
        viewController.username = valueToPass
        print(valueToPass)
    }
}

Ответы [ 3 ]

0 голосов
/ 20 февраля 2019

В раскадровке вы должны перейти от ячейки табличного представления к контроллеру целевого представления. введите описание изображения здесь импорт UIKit

класс ViewController1: UIViewController, UITableViewDelegate, UITableViewDataSource {func tableView (_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {return 5}

1006 *

}

import UIKit

class ViewController2: UIViewController {

var name : String?
override func viewDidLoad() {
    super.viewDidLoad()

    debugPrint(name)
}
0 голосов
/ 20 февраля 2019

Вместо прямого доступа к ячейке.Просто получите ваше имя пользователя из yourArray, который содержит ваши данные.

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let user = yourArrayWhichContainsUserObject[indexPath.row]
    valueToPass = user.username
    print(valueToPass)
    performSegue(withIdentifier: "Profile", sender: self)

}

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){

    if (segue.identifier == "Profile") {
    let viewController = segue.destination as! UserProfileViewController
        viewController.username = valueToPass
    }
}
0 голосов
/ 20 февраля 2019

Ваш UserTableViewCell предположительно сконфигурирован из вашего источника данных - возможно, это массив имен пользователей или структур, которые включают имена пользователей?Если это так, то вам следует взять имя пользователя из источника данных, а не его представление (которое, возможно, было переработано ко времени перехода).

Например, если ваш

tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
Функция

присваивает значение, такое как

currentCell.nameLabel.text = users[indexPath.row]

, затем вместо этого попробуйте использовать

valueToPass = users[indexPath.row]

, поскольку indexPath является аргументом функции didSelectRowAt. * ​​1012 *

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