视图控制器转换的3种方式

Posted

技术标签:

【中文标题】视图控制器转换的3种方式【英文标题】:3 ways of view controller transition 【发布时间】:2017-10-19 02:15:25 【问题描述】:

我是ios开发的初学者,最近,我只是按照初学者教程。

假设我想通过单击一个按钮从一个 VC 移动到另一个 VC,所以我发现有三种方法可以从一个 ViewController 移动到另一个 ViewController(模态转场)。

    在主情节提要中,我只需单击控件并从按钮拖动到目标视图控制器,然后以模态方式选择呈现

    以编程方式,通过实现以下代码

    @IBAction func logInButtonDidPressed(_ sender: Any) 
    
    
    
    // modal transition to VC2
    
    let viewController2 = 
    storyboard?.instantiateViewController(withIdentifier: 
    "ViewController2") as! ViewController2
    
    present(viewController2, animated: true, completion: nil)
    
    
    
    
    

    以编程方式,通过使用执行转场功能

    @IBAction func logInButtonDidPressed(_ sender: Any) 
    
    
    performSegue(withIdentifier: "toSecondViewController", sender: self)
    
    
    
    
    

它们是一样的吗?还是用于不同的情况?

提前致谢:)

【问题讨论】:

【参考方案1】:

是的,它们很相似。我认为明显的区别是数据传递。第一个和第三个相同,使用以下方法将数据传递给下一个控制器:

// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    // Get the new view controller using segue.destinationViewController.
    // Pass the selected object to the new view controller.
    if let viewController2 = segue.destination as? ViewController2 
        viewController2.someProperty = someValue
    

对于第二个过渡,你直接在创建下一个控制器时设置数据:

let viewController2 = storyboard?.instantiateViewController(withIdentifier: 
"ViewController2") as! ViewController2

viewController2.someProperty = someValue

present(viewController2, animated: true, completion: nil)

【讨论】:

【参考方案2】:

我会使用 segues,因为与手动演示相比有一些优势:

您可以创建展开转场以将当前视图控制器退出到层次结构中的任何视图控制器。

您可以通过单击鼠标将 3D 触摸支持添加到转场。

第一个和最后一个方法产生相同的结果。我会尽可能通过单击和拖动来创建转场。如果您需要在执行转换之前进行一些数据验证或其他工作,则必须手动调用performSegue 方法。

【讨论】:

以上是关于视图控制器转换的3种方式的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式将 UITableView 样式从普通转换为组 [重复]

带有选项卡视图控制器的 Xcode IOS 转换视图

为什么我的导航控制器现在是以模态方式进行转换而不是推送?

控制器读取视图表单中的数据的几种方式

ios-创建根视图控制器的三种方式

如何在一种情况下推送视图控制器,但在另一种情况下以模态方式呈现它?