【发布时间】:2015-04-13 22:38:59
【问题描述】:
我正在学习 iOS,因为我编写了一个使用 UITableViewController 和 Core Data 来显示项目列表的应用程序,以及另一个也使用 Core Data 来配置各种附加属性的视图控制器,这些属性在表格视图。
UITableViewController 导航栏中的一个按钮连接到另一个视图,让我可以设置各种细节。这是使用情节提要“显示细节”segue 完成的,而且效果很好。
我想使用 UITableViewCell 中的辅助操作按钮来连接到同一个细节视图控制器,所以我在故事板中创建了另一个“显示细节”序列,将辅助细节按钮连接到细节视图控制器(即:与导航栏中的按钮相同的segue)
令人困惑的是,当我在运行时单击详细附件按钮时,什么也没有发生,并且永远不会调用 prepareForSegue。
UITableView 单元格样式是 Subtitle,我已将其配置为具有 Detail 辅助操作。但是,除非我特别添加,否则不会显示附件按钮:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: Storyboard.reuseID)
let tone = toneTable[indexPath.row]
cell.textLabel!.text = tone.valueForKey("toneName") as? String
cell.detailTextLabel!.text = tone.valueForKey("toneDescription") as? String
cell.accessoryType = UITableViewCellAccessoryType.DetailButton
return cell
我终于放弃了,自己打电话给prepareForSeque:
override func tableView(tableView: UITableView, accessoryButtonTappedForRowWithIndexPath indexPath: NSIndexPath) {
let tone = toneTable[indexPath.row]
self.performSegueWithIdentifier("ShowToneDetail", sender: tone)
}
(我使用 sender 参数作为传递 NSManagedOject 的便捷位置)
现在,prepareForSegue 被调用,但是如果我在 prepareForSegue 中放置一个断点,我会看到 segue.destinationViewController 指向源视图控制器,而不是目标视图控制器。这很不幸,因为我想将一些值传递给destinationViewController 的新实例。
有趣的是,segue 确实正确地实例化了destinationViewController,并将控制权传递给它。
但是,我不明白发生了什么。我不知道为什么我必须自己调用prepareForSeque,也不知道为什么segue 的destinationViewController 设置不正确。
我做错了什么?
ps:这只是我的看法,还是 XCode 不如 Eclipse 等其他 IDE 成熟?
【问题讨论】:
标签: ios swift uistoryboardsegue