【问题标题】:going from one view to the next in swift快速从一个视图转到下一个视图
【发布时间】:2014-07-26 04:46:38
【问题描述】:

我有 2 个按钮应该在视图控制器 1 和视图控制器 2 之间切换。当我单击按钮切换到第二个视图控制器时,我不断收到错误消息:致命错误:无法打开 Optional.None

var settings : UIButton = UIButton(frame: CGRectMake(0, 0, 40, 40))

    settings.setTitle("S", forState: UIControlState.Normal)
    settings.backgroundColor = UIColor.blackColor()
    settings.center = (CGPointMake(120, 30))
    settings.layer.cornerRadius = 8
    settings.addTarget(self, action: "settingsBar:", forControlEvents:UIControlEvents.TouchUpInside)
    settings.layer.borderWidth = 3
    settings.layer.borderColor = UIColor.grayColor().CGColor
    view.addSubview(settings)

@IBAction func settingsBar(sender: AnyObject){

    let view2 = self.storyboard.instantiateViewControllerWithIdentifier("view2") as?
        ViewController2
    self.navigationController.pushViewController(view2, animated: true)
}

【问题讨论】:

    标签: uiviewcontroller swift


    【解决方案1】:

    如果你告诉我们你得到错误的实际行会很有帮助,但我假设它是打开的:

    self.navigationController.pushViewController(view2, animated: true)
    

    您可能会在该行收到该错误的三个原因。两者都与 view2nil 有关,而 pushViewController 不希望它是。

    1. 情节提要中没有名为“view2”的视图控制器:这将导致instantiateViewControllerWithIdentifier 返回nil。那么view2 将是nil,当pushViewController 尝试推送nil 时,您会收到错误消息
    2. 名为“view2”的视图控制器不是ViewController2 类型。在这种情况下,使用as? 的转换将返回nil 也会导致pushViewController 断言
    3. 您的视图控制器(您问题中的代码来自该控制器)实际上并未嵌入导航控制器中。这将导致self.navigationController 成为nil。当您尝试在 nil 上调用 pushViewController 时,您会收到错误消息

    【讨论】:

    • 我确实有一个视图控制器设置为 ViewController2,身份设置为 view2
    • @user3856516 我忘记了您可能会收到该错误的第三个原因。我更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    相关资源
    最近更新 更多