我有一个没有情节提要的应用程序,所有UI创建都是通过代码完成的,我得到了一个splitView我可以使其在iPhone上使用的应用程序,因为该应用程序最初仅是为iPad设计的,因此当您在列表中选择一行时,大师认为,它在iPhone上什么也不做,但在iPad上工作正常。
splitView
所以我的问题是我可以创建并执行允许在didSelectRowAtIndexPath方法上显示“详细视图”的segue 吗?
didSelectRowAtIndexPath
到目前为止,这是我所做的:
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表示没有标识为“ test”的标记。
我也尝试通过调用它segue.perform()并将performHandler内容添加到prepareForSegueMethod中:
segue.perform()
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所说,没有Storyboard,我不可能做我想做的事,所以感谢他的帮助:)
Segue是情节提要互动的组成部分,可以从班级名称中了解UIStoryboardSegue。以编程方式创建序列是一个坏主意。如果我没有记错,情节提要会为您创建它们。
UIStoryboardSegue
为了解决您的问题,请尝试使用一些简单的方法,例如简而言之ViewController。
ViewController
let vc = self.storyboard?.instantiateViewControllerWithIdentifier("id") as! MyController self.presentViewController(vc, animated: true, completion: nil)
据我从评论中我们的谈话中了解到。您想使用没有情节提要的segues为tableview创建导航到详细信息视图。目前,如果没有情节提要,就不可能做到这一点。
为了将来学习,请尝试调查此信息。