只有在发生事情时才进行转场

问题描述 投票:0回答:1

如何只在条件发生时执行转场?

我已经尝试过了。

  • 在Main.storyboard中,我有两个视图控制器。我有控制从ViewController.swift的View Controller图标拖到SecondViewController.swift的任何地方。

  • 我选择了带有分道符的箭头,并在属性> Identifier中给它命名为segueTo2。

  • 在ViewController.swift中,我有一个textField1和toTo2按钮。都连接在故事板中。我也有:

    @IBOutlet weak var textField1: UITextField!  
    
    @IBAction func goTo2(_ sender: UIButton) {
      performSegue(withIdentifier: "segueTo2", sender: self)
    }
    
    override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
    
    let str: String? = textField1.text
    if str!.isEmpty {
         print ("text field is empty. Do not do the segue")
         return false
     }
     else {
         return true
     }
    

    }

同样的代码在macOS中也能很好地工作(只需将textField1.text改为textField1.stringValue)。在iOS中,它不工作。也就是说,当textField1为空时,它仍然会进行转场。

如何只在Text Field有内容时才进行转场?

ios swift storyboard
1个回答
0
投票

这个 回答 解释了你的逻辑发生了什么。

你可以做的是,在执行转场之前,先检查按钮函数里面的文本字段是否被填满。


1
投票

简单的解决方案,好的做法是直接在调用 performSegue

@IBAction func goTo2(_ sender: UIButton) {
    guard !textField1.text!.isEmpty else { return }
    performSegue(withIdentifier: "segueTo2", sender: self)
}

委托方法其实只针对 硬连接 转场,所以你可以删除它

  override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {

    let str: String? = textField1.text
    if str!.isEmpty {
          print ("text field is empty. Do not do the segue")
         return false
     }
     else {
         return true
     }
}  

© www.soinside.com 2019 - 2024. All rights reserved.