@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(), вы можете указать действие, которое нужно выполнить с полученным текстом в замыкании.