一尘不染

在没有情节提要的情况下创建和执行segue

swift

我有一个没有情节提要的应用程序,所有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表示没有标识为“ test”的标记。

我也尝试通过调用它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所说,没有Storyboard,我不可能做我想做的事,所以感谢他的帮助:)


阅读 218

收藏
2020-07-07

共1个答案

一尘不染

Segue是情节提要互动的组成部分,可以从班级名称中了解UIStoryboardSegue。以编程方式创建序列是一个坏主意。如果我没有记错,情节提要会为您创建它们。

为了解决您的问题,请尝试使用一些简单的方法,例如简而言之ViewController

let vc = self.storyboard?.instantiateViewControllerWithIdentifier("id") as! MyController
self.presentViewController(vc, animated: true, completion: nil)

据我从评论中我们的谈话中了解到。您想使用没有情节提要的segues为tableview创建导航到详细信息视图。目前,如果没有情节提要,就不可能做到这一点。

为了将来学习,请尝试调查此信息

2020-07-07