【发布时间】:2016-07-13 00:16:16
【问题描述】:
我有一个没有故事板的应用程序,所有 UI 创建都是用代码创建的,我有一个 splitView,我可以让它在 iPhone 上使用,因为该应用程序最初是为 iPad 设计的,所以当你选择主视图列表中的一行,它在 iPhone 上没有任何作用,但在 iPad 上运行良好。
所以我的问题是我可以创建并执行允许在 didSelectRowAtIndexPath 方法上显示详细视图的 segue 吗?
这是我到目前为止所做的:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let segue = UIStoryboardSegue(identifier: "test", source: self, destination: detailViewController!)
performSegueWithIdentifier("test", sender: self)
}
但是当运行并选择一行时,应用程序崩溃了,告诉它需要一个 performhandler,所以我添加了这个:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let segue = UIStoryboardSegue(identifier: "test", source: self, destination: detailViewController!, performHandler: { () -> Void in
let object = self.fetchedResultsController.objectAtIndexPath(indexPath)
let controller = self.detailViewController!
controller.detailItem = object
controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem()
controller.navigationItem.leftItemsSupplementBackButton = true
})
performSegueWithIdentifier("test", sender: self)
}
,现在选择行Xcode时,表示没有具有此类标识符“测试”的SEGUE。
我也尝试通过segue.perform()调用它并将performHandler内容添加到prepareForSegueMethod中:
if segue.identifier == "test" {
if let indexPath = self.tableView.indexPathForSelectedRow {
let object = self.fetchedResultsController.objectAtIndexPath(indexPath)
let controller = (segue.destinationViewController as! UINavigationController).topViewController as! DetailViewController
controller.detailItem = object
controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem()
controller.navigationItem.leftItemsSupplementBackButton = true
}
}
它什么都不做,不会崩溃,只是突出显示我选择的行,仅此而已
你们能帮帮我吗?
编辑:正如 Oleg Gordiichuk 所说,没有故事板就不可能做我想做的事,所以感谢他的帮助 :)
【问题讨论】: