在SWIFT中的xib文件上展示一个ViewController

10

我有一个xib文件,在一个UIView上创建了一个弹出控制器。当在View Controller 1上按下按钮时,这个弹出控制器会向上动画。然后,我在UIView上有一个按钮,当按下它时,我想呈现另一个视图控制器(View Controller 2)。代码如下:

class PopUpViewControllerSwift : UIViewController {

  @IBAction func goToVC2(sender: UIButton) {

        self.removeAnimate()

        let VC2: VC2 = self.storyboard?.instantiateViewControllerWithIdentifier("VC2") as VC2
        var modalStyle: UIModalTransitionStyle = UIModalTransitionStyle.CoverVertical
        VC2.modalTransitionStyle = modalStyle
        presentViewController(VC2, animated: true, completion: nil)

    }
}

尽管当按钮被按下时会崩溃,但没有错误、回调或任何其他东西。很明显,如果只是一个普通的视图控制器,这通常会起作用,但因为我正在弹出视图内执行它,并将其动画显示在另一个视图之上,所以我认为这就是问题所在?

有人能帮忙吗?

谢谢

3个回答

20

我是在 UICollectionViewdidSelectItemAtIndexPath 方法中完成了这个操作。

// Register Nib
let newViewController = NewViewController(nibName: "NewViewController", bundle: nil)

// Present View "Modally"
self.present(newViewController, animated: true, completion: nil)

我将ViewControllerID设置为与文件名相同,这样我就可以确定引用正确的ViewController


3
在 Swift 4 中使用:self.present()。 - Duy Phan

0

请确保self.storyboard不为nil。

同时确认VC2是故事板文件中ViewController的标识之一。

希望这能对您有所帮助。


如果VC2在故事板文件中,尝试使用以下命令获取VC2。
let storyboard = UIStoryboard(name: "YourStoryboardName(maybe 'Main')", bundle: nil)
let vc2 = storyboard.instantiateViewControllerWithIdentifier("VC2") as VC2

如果VC2在nib文件中,尝试使用以下命令获取VC2

let vc2 = VC2(nibName: "YourNibName", bundle: nil)


self.storyboard为什么返回nil?为什么会这样,我该如何克服它?顺便说一句,谢谢你的好答案。 - Henry Brown

0

应该是这样的:

let vc = MyViewController(nibName: "MyViewController", bundle: nil)
present(vc, animated: true, completion: nil)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接