#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 трудно сказать без дополнительной информации. код предупреждения выглядит нормально и работает для меня