我正在编写一个多步骤注册流程,但无法让每个视图控制器之间传递单元格标签。
以下是第一个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变量,但是当我尝试打印内容时,它什么也没有返回。
我知道这个问题的变化已被多次询问,但我似乎无法找到(或者可能理解)我弄乱的东西。
答案 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
不应该是表格视图功能的一部分,您已将其复制到永远不会被调用的地方。将其移出并在其上放置一个断点以查看它正在被调用。