【问题标题】:Perform a segue only if something happens仅在发生某些事情时才执行 segue
【发布时间】:2020-05-04 09:39:38
【问题描述】:

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

我尝试过的:

  • 在 Main.storyboard 我有两个视图控制器。我可以控制从 ViewController.swift 的 View Controller 图标拖动到 SecondViewController.swift 中的任何位置。

  • 我选择带有 segue 和 In Attributes > 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有内容的情况下进行segue?

【问题讨论】:

  • 为什么是负面的。我进行了广泛的搜索,没有人解释这一点。我需要做些什么来改进问题?

标签: ios swift storyboard


【解决方案1】:

简单的解决方案,最好在调用performSegue之前直接检查条件

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

委托方法实际上只针对硬连接 segues,所以你可以删除它

罢工>

  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
     }
}  

【讨论】:

  • 这对 iOS 来说是正确的。为什么不使用 macOS?正如我所说,如果我只在 macOS 中使用 if 或 guard,即使文本字段为空,它也会产生 segue。如果我使用我提到的所有代码,包括 shouldPerformSegue,它就可以工作
【解决方案2】:

answer 解释了你的逻辑发生了什么。

您可以做些什么,在执行转场之前检查按钮功能内是否填充了文本字段。

【讨论】:

  • 这更令人困惑!现在我意识到,在 iOS 中,如果我将 if-else 放在按钮中,我就不需要 shouldPerformSegue。在 macOS 中,我需要 shouldPerformSegue 并且必须将 if-else 放在那里。
  • 如果我帮助解决了您的问题,请标记为答案
  • 这有帮助,但不能解决问题。建议的答案不能解释我的情况。
  • 你的意思是 iOS 不需要 shouldPerformSegue 吗?为什么在 macOS 中是必要的?
  • 当您在代码中自己调用 performSegueWithIdentifier 时,不会调用 shouldPerformSegue。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-25
  • 1970-01-01
相关资源
最近更新 更多