当前位置: 首页 > 面试题库 >

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

宗建章
2023-03-14
问题内容

我有一个没有情节提要的应用程序,所有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,我不可能做我想做的事,所以感谢他的帮助:)


问题答案:

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

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

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

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

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



 类似资料:
  • 问题内容: 我想在Centos7上使用shell脚本自动生成一对ssh密钥,我已经尝试过 所有这些命令都不起作用,仅输入一个“ enter”,然后在“ Enter passphrase(空无密码)为空”时停止shell脚本,我只想知道如何在shell中连续模拟多个“ enter”。 非常感谢任何人的帮助! 问题答案: 只需 使用一个空白通 使用标志: 要覆盖密钥文件 (在此示例中): 从 手册 页

  • 问题内容: 在XCode 6中创建一个新项目不允许禁用Storyboard。您只能选择Swift或Objective-C,而不能使用Core Data。 我尝试删除情节提要,并从项目中删除主情节提要,然后从didFinishLaunching手动设置窗口 在AppDelegate中,我有以下内容: 但是,XCode给我一个错误: 类“ AppDelegate”没有初始化程序 有人成功吗? 问题答案

  • 问题内容: 我想知道在不提示输入密码的情况下执行数据库mysqldump的命令。 原因:我想运行一个cron作业,该作业每天执行一次mysqldump数据库的转储。因此,出现提示时,我将无法插入密码。 我该如何解决? 问题答案: 由于您正在使用Ubuntu,因此您所要做的只是在主目录中添加一个文件,这将禁用mysqldump密码提示。这是通过创建文件来完成的(权限需要为600)。 将此添加到.my

  • 我试着去看其他的代码例子,但是它们和我的代码比较相似,但是我的应用程序仍然会因为同样的错误而崩溃。 这是我使用firebase文档的指导方针编写的代码: 上面的代码正在将otp发送到给定的号码,但是它崩溃了,并且cat-log显示了上面提到的错误。

  • 问题内容: 我正在寻找没有浏览器的Javascript编程。我想从Linux或MacOSX命令行运行脚本,就像我们运行任何其他脚本语言(ruby,PHP,Perl,Python …)一样 我研究了spider monkey(Mozilla)和v8(Google),但它们似乎都是嵌入式的。 是否有人将Javascript作为脚本语言从命令行执行? 如果有人好奇,为什么我期待到这一点,我一直在关注着N

  • 文档说这个库运行在GPU上。如果我功能强大的笔记本电脑没有GPU,我还能运行Deeplearning4J吗?