【发布时间】:2016-03-22 05:43:56
【问题描述】:
我的应用中有一个列表视图,我正在动态添加单元格。
对于每个单元格,我想附加一个segue,并感谢它在用户按下单元格时打开一个UIViewController(称为FullUser)(UIViewController 将包含此segue 传递的数据,从用户选择的特定单元格中获取,存储在一个名为SingleUser的结构。
所以我有这个方法:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var cell: UITableViewCell = tableView.cellForRowAtIndexPath(indexPath) as! SingleEventCell
let user = self.items[indexPath.row] as? SingleUser
self.performSegueWithIdentifier("fullUserFromListSegue", sender: user)
}
然后:
var fullUserDetails: FullUser?
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "fullUserFromListSegue"){
fullUserDetails = segue.destinationViewController as? FullUser
//now I want to set the textfield on the other panel:
let user2 = sender as? SingleUser
var username = user2?.username
fullRequestDetails!.username.text = username!
}
}
但是我遇到了错误,当我在调试器中检查它时,我看到 user2 为零。为什么这样?我想在那里存储一个SingleUser 对象,那么我怎样才能将它传递到那里呢?
【问题讨论】:
-
文档似乎不太清楚这些
sender参数在两种情况下是否相同。在您检查假设时,我会尝试使用dynamicType属性来检查这些类型。试试print("Sender Type \(sender.dynamicType)")你的评论在哪里。 -
如果这个问题的答案有帮助,请告诉我:stackoverflow.com/questions/35849931/…
-
在你执行segue之前
user变量不是nil吗? -
好吧,这太奇怪了,我只是在函数
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {的开头放了一个随机的print,当我点击每个单元格时什么都没有打印出来...... -
不确定这是否有帮助,但我相信如果你有一个 actionSegue 连接到故事板中的单元格,didSelectCell 将不会被调用。如果你想手动调用 segue,你应该将 segue 连接到 ViewController 而不是单元格。
标签: ios swift segue uistoryboardsegue