Окно предупреждения не отображается. Код X-это пропуск кода окна предупреждения в Swift

#swift #xcode #segue #uialertview #uialertcontroller

Вопрос:

Когда я performSegue вошел ViewController2 , то автоматически позвонил unwindToMyHours ViewController1 . тогда я не знаю, почему X-код пропускает код представления Alert BOX .

OUTPUT -> Другая часть завершена.

и пропуск xCode -> > Task 1 и task 2

Код ~ ViewController2

 @IBAction func CancelButtonTapped(_ sender: UIButton) {
    let alert = UIAlertController(title: "Delete Time", message: "Are you sure?", preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "Delete", style: .destructive, handler: { [self] _ in
            
            self.deleted = true
            self.performSegue(withIdentifier: "unwindToMyHours", sender: nil)
        }))
        alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
        self.present(alert, animated: true, completion: nil)
 }
 

Код ~ viewController1

 @IBAction func unwindToMyHours( _ seg: UIStoryboardSegue) {
    if (seg.source as? ViewController2)?.submitted == true {
        loadData()
    } else if (seg.source as? ViewController2)?.deleted == true {
        let alert = UIAlertController(title: "Deleted", message: "Tabel have been updated", preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { alert in
            print("Task 1")
        }))
        present(alert, animated: true) {
            print("Task 2")
        }
        print("Else part complete")
    }
}
 

Ответ №1:

Хммм. Возможно, вы забыли уничтожить свой первый контроллер оповещения.

и без уничтожения первого вы представляете второй контроллер предупреждений, поэтому XCode не может представить ваш второй контроллер предупреждений.

Ваш код выглядит красиво…… позвольте мне отредактировать это.

Код ~ ViewController2

 @IBAction func CancelButtonTapped(_ sender: UIButton) {
    let alert = UIAlertController(title: "Delete Time", message: "Are you sure?", preferredStyle: .alert)
    alert.addAction(UIAlertAction(title: "Delete", style: .destructive, handler: { [self] _ in
        
        self.deleted = true
        self.dismiss(animated: false, completion: nil) // You are forgetting  this
        self.performSegue(withIdentifier: "unwindToMyHours", sender: nil)
    }))
    alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
    self.present(alert, animated: true, completion: nil)
}
 

Код ~ viewController1 -> Тот же код

 @IBAction func unwindToMyHours( _ seg: UIStoryboardSegue) {
if (seg.source as? ViewController2)?.submitted == true {
    loadData()
} else if (seg.source as? ViewController2)?.deleted == true {
    let alert = UIAlertController(title: "Deleted", message: "Tabel have been updated", preferredStyle: .alert)
    alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { alert in
        print("Task 1")
    }))
    present(alert, animated: true) {
        print("Task 2")
    }
    print("Else part complete")
}
}
 

Ответ №2:

Скорее всего, это происходит потому, что ваш предыдущий контроллер представления еще не был удален, и вы не можете present создать новый контроллер представления(каковым является предупреждение), пока ваш контроллер представления не станет первым. Подождите, пока это не произойдет вот так:

 var shouldDisplayDeletedAlert = false

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    if shouldDisplayDeletedAlert {
        let alert = UIAlertController(title: "Deleted", message: "Tabel have been updated", preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { alert in
            print("Task 1")
        }))
        present(alert, animated: true) {
            print("Task 2")
        }
        shouldDisplayDeletedAlert = false
    }
}

@IBAction func unwindToMyHours( _ seg: UIStoryboardSegue) {
    if (seg.source as? ViewController2)?.submitted == true {
        loadData()
    } else if (seg.source as? ViewController2)?.deleted == true {
        shouldDisplayDeletedAlert = true
    }
}
 

Комментарии:

1. @ viewDidAppear iOSSwiftLearner в честь кого называется unwindToMyHours ?

2. да, но опять же xcode Пропускает код представления предупреждения, показывающий

3. @iOSSwiftLearner трудно сказать без дополнительной информации. код предупреждения выглядит нормально и работает для меня