我正在学习iOS,因为我编写的应用程序使用UITableViewController和Core Data来显示项目列表,另一个视图控制器也使用Core Data来配置各种其他属性,这些属性未在表格视图。
UITableViewController导航栏中的一个按钮会转到另一个视图,让我可以设置各种细节。这是使用故事板“显示细节”segue完成的,它工作正常。
我想使用UITableViewCell中的附件操作按钮来切换到相同的详细视图控制器,因此我在故事板中创建了另一个“显示详细信息”segue,它将附件详细信息按钮连接到详细视图控制器(即:与导航栏中的按钮相同的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那么成熟?
答案 0 :(得分:0)
您以错误的方式创建细胞。您应该使用dequeueReusableCellWithIdentifier:forIndexPath:使用您在故事板中设置的标识符使单元格出列。通过按照您的方式进行操作,您可以直接实例化一个知道"没有关于故事板中添加了详细信息披露按钮或您制作的segue的单元格。
我不知道为什么segue.destinationViewController会指向源视图控制器。我的猜测是它没有,也许你的控制器类混合了。