Я чрезвычайно новичок в iOS. Я пытаюсь показать диалог пользователю, чтобы получить какой-то ввод, но действия никогда не запускаются. Я искал в net несколько часов, и, похоже, у меня нет ответа.
Вот функция, которую я пытаюсь использовать для отображения диалогового окна:
private func showAmountDialog(type: String, onComplete: @escaping (Double) -> Void) {
let alert = UIAlertController(title: "Enter an amount", message: nil, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: LzStrings.Common_Cancel, style: .cancel, handler: nil))
alert.addTextField(configurationHandler: { textField in
textField.placeholder = "0.00 \(type)"
textField.keyboardType = .decimalPad
})
alert.addAction(UIAlertAction(title: LzStrings.Common_OK, style: .default) { (UIAlertAction) in
if let input = alert.textFields?.first?.text, let amount = Double(input) {
print("Your amount: \(amount)")
}
})
self.present(alert, animated: true)
}
self
вот мой ViewController
, у которого есть родительский тип UIViewController
и несколько других протоколов.
Что я могу делать не так?
РЕДАКТИРОВАТЬ : Я знал, что это не выполняется, используя точки останова, а не полагаясь на print("...")
Кроме того, поскольку я добавил TextField
непосредственно перед добавлением действия, проверка обнуляемости бесполезна, и textFields.first
никогда не бывает nil
, поэтому в обоих случаях должна быть сработала точка останова или должна быть выполнена print("...")
, чего не происходит ни один из них.
РЕДАКТИРОВАТЬ 2 : Поскольку if statement
может немного отвлекать внимание, я отредактировал свой код таким образом и снова протестировал:
alert.addAction(UIAlertAction(title: LzStrings.Common_OK, style: .default) { (UIAlertAction) in
if let input = alert.textFields?.first {
if let amount = Double(input.text ?? "") {
print("Your amount: \(amount)")
} else {
print("Can't cast this string to double")
}
} else {
print("Text field is null")
}
})
Тем не менее, от dialog
нет отзывов. PS : Даже Отмена button
не работает.
РЕДАКТИРОВАТЬ 3 : Мое отклонение function
отменено в классе super
, но оно проходит прохождение closure
обычно:
override open func dismiss(animated flag: Bool, completion: (() -> Void)? = nil) {
if let navigationController = self.navigationController as? NavigationController {
navigationController.dismiss(animated: flag, completion: completion)
} else {
super.dismiss(animated: flag, completion: completion)
}
}