3种视图控制器转换方式

时间:2017-10-19 02:15:25

标签: ios swift

我是iOS开发的初学者,最近,我只是按照初学者的教程进行操作。

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

  1. 在主故事板中,我只需点击控制并从按钮拖动到目标视图控制器并选择模态

  2. programmaticaly,通过实施以下代码

    @IBAction func logInButtonDidPressed(_ sender: Any) {
    
    
    
    // modal transition to VC2
    
    let viewController2 = 
    storyboard?.instantiateViewController(withIdentifier: 
    "ViewController2") as! ViewController2
    
    present(viewController2, animated: true, completion: nil)
    
    
    
    }
    
  3. 以编程方式,通过使用执行segue函数

    @IBAction func logInButtonDidPressed(_ sender: Any) {
    
    
    performSegue(withIdentifier: "toSecondViewController", sender: self)
    
    
    
    }
    
  4. 他们是一样的吗?还是用于不同的情况?

    提前致谢:)

2 个答案:

答案 0 :(得分:2)

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

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

  • 只需点击一下鼠标,即可为细分添加3D触控支持。

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

答案 1 :(得分:2)

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

// 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)