Выполните переход, только если что-то случится - PullRequest
0 голосов
/ 04 мая 2020

Как выполнить переход только в случае возникновения условия?

Что я пробовал:

  • В Main.storyboard у меня есть два контроллера вида. У меня есть перетаскивание элемента управления из значка View Controller в ViewController.swift в любое место в SecondViewController.swift.

  • Я выбираю стрелку с помощью перехода и В атрибутах> Идентификатор я даю ей имя 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 пусто, он все еще делает переход.

Как сделать переход только тогда, когда в текстовом поле есть содержимое?

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Простое решение, рекомендуется проверять условие непосредственно перед вызовом 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
     }
}  

0 голосов
/ 04 мая 2020

Этот ответ объясняет, что происходит с вашей логикой c.

Что вы можете сделать вместо этого, проверьте, заполнено ли текстовое поле внутри функции кнопки перед выполнением перехода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...