为什么这个值不在我的ViewControllers之间传递?

时间:2015-12-20 08:47:40

标签: ios swift uitableview

我正在编写一个多步骤注册流程,但无法让每个视图控制器之间传递单元格标签。

以下是第一个viewController的代码:

class FirstVC: UIViewController, UITableViewDelegate {

@IBOutlet weak var tableview: UITableView!
var userGoalOptions = ["Lose Fat","Gain Muscle", "Be Awesome"]
var selectedGoal: String = ""


override func viewDidLoad() {
    super.viewDidLoad()
    self.title = "What Is Your Goal?"

}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier("Cell1")! as UITableViewCell

    cell.textLabel?.text = userGoalOptions[indexPath.row]

    return cell
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return userGoalOptions.count
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    let indexPath = tableView.indexPathForSelectedRow
    let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as UITableViewCell!

    selectedGoal = currentCell.textLabel!.text!

    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if (segue.identifier == "secondSeque") {

            let vc = segue.destinationViewController as! SecondVC

            vc.userGoal = selectedGoal       
    }
}

segue(secondSegue)连接到Interface Builder

中的表格视图单元格

在我的目标viewcontroller(vc)中,我有一个空的userGoal变量,但是当我尝试打印内容时,它什么也没有返回。

我知道这个问题的变化已被多次询问,但我似乎无法找到(或者可能理解)我弄乱的东西。

2 个答案:

答案 0 :(得分:2)

假设segue连接到Interface Builder中的表视图单元格,则单元格将作为sender中的prepareForSegue参数传递

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if (segue.identifier == "secondSeque") {
        let selectedIndexPath = tableView.indexPathForCell(sender as! UITableViewCell)!
        let vc = segue.destinationViewController as! SecondVC

        vc.userGoal = userGoalOptions[selectedIndexPath.row]       
}

在这种情况下,didSelectRowAtIndexPath不是必需的,可以删除。

除此之外,从模型(userGoalOptions)检索数据总是比从视图(表格视图单元格)中检索数据更好的方法,例如

待办事项

let indexPath = tableView.indexPathForSelectedRow
selectedGoal = userGoalOptions[indexPath.row]

不要

let indexPath = tableView.indexPathForSelectedRow
let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as UITableViewCell!
selectedGoal = currentCell.textLabel!.text!

答案 1 :(得分:1)

prepareForSegue不应该是表格视图功能的一部分,您已将其复制到永远不会被调用的地方。将其移出并在其上放置一个断点以查看它正在被调用。