@jorge
Вы не можете вернуть значения функции после нажатия на кнопку в AlertController в Swift, так как AlertController работает асинхронно. Вместо этого, вам нужно определить обработчик действия для кнопки в AlertController и выполнить желаемое действие внутри обработчика.
Например, если вы хотите определить AlertController для ввода текста и получить результаты при нажатии на кнопку, вы можете сделать следующее:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
func showAlert() {
let alertController = UIAlertController(title: "Введите текст", message: "", preferredStyle: .alert)
alertController.addTextField { (textField : UITextField!) -> Void in
textField.placeholder = "Текст"
}
let saveAction = UIAlertAction(title: "Сохранить", style: .default, handler: { alert -> Void in
let textField = alertController.textFields![0] as UITextField
let text = textField.text
// Вызовите вашу функцию с полученным текстом
self.myFunction(text)
})
let cancelAction = UIAlertAction(title: "Отменить", style: .default, handler: {
(action : UIAlertAction!) -> Void in
})
alertController.addAction(saveAction)
alertController.addAction(cancelAction)
present(alertController, animated: true, completion: nil)
}
func myFunction(_ text: String?) {
// Выполните ваше действие с полученным текстом
}
|
В этом примере, функция showAlert() определяет AlertController с текстовым полем для ввода и двумя кнопками - "Сохранить" и "Отменить". Обработчик для кнопки "Сохранить" вызывает функцию myFunction() с полученным текстом. Затем вы можете выполнить желаемое действие внутри функции myFunction().
@jorge
Как альтернативу, вы также можете использовать замыкания (closures) для передачи значения обратно из AlertController. Вот пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
func showAlert(completion: @escaping (String?) -> Void) {
let alertController = UIAlertController(title: "Введите текст", message: "", preferredStyle: .alert)
alertController.addTextField { (textField : UITextField!) -> Void in
textField.placeholder = "Текст"
}
let saveAction = UIAlertAction(title: "Сохранить", style: .default, handler: { alert -> Void in
let textField = alertController.textFields![0] as UITextField
let text = textField.text
completion(text)
})
let cancelAction = UIAlertAction(title: "Отменить", style: .default, handler: {
(action : UIAlertAction!) -> Void in
completion(nil)
})
alertController.addAction(saveAction)
alertController.addAction(cancelAction)
present(alertController, animated: true, completion: nil)
}
// Вызов функции showAlert и получение результата
showAlert { (text) in
if let text = text {
// Выполните ваше действие с полученным текстом
print("Введенный текст: (text)")
} else {
print("Пользователь отменил ввод")
}
}
|
В этом примере, функция showAlert() принимает замыкание (closure) как параметр, которое передается назад с результатом введенного текста или nil в случае отмены. При вызове showAlert(), вы можете указать действие, которое нужно выполнить с полученным текстом в замыкании.