Пример UIAlertController
Теоретическую часть ActionSheet, Alert и UIAlertController
Рассмотрим реальный пример работы UIAlertController. У нас есть кнопка, для установки рейтинга чего-либо. При нажатии на эту кнопку срабатывает метод rtae(). Внутри этого метода мы создаем UIAlertController. , в котором создаем два объекта UIAlertAction (это кнопки Save и Cancel) и одно текстовое поле UITextField.
// // proSwift.ru // @IBAction func rate(sender: AnyObject) { let alert = UIAlertController(title: "New rating", message: "Rate this bow tie", preferredStyle: .Alert) let cancelAction = UIAlertAction(title: "Cancel", style: .Default) { (_) -> Void in } let saveAction = UIAlertAction(title: "Save", style: .Default) { (_) -> Void in let textField = alert.textFields?[0] if let tf = textField { if let text = tf.text { self.updateRating(text) } } } alert.addTextFieldWithConfigurationHandler { (_) -> Void in } alert.addAction(cancelAction) alert.addAction(saveAction) self.presentViewController(alert, animated: true, completion: nil) } func updateRating(numericString: String) { someThingForRaiting.rating = (numericString as NSString).doubleValue updateUIFor(someThingForRaiting) }
На 9-ой строке мы получаем наше текстовое поле из массива всех текстовых полей нашего UIAlertController. Т.к. этих полей может и не быть, мы ставим ?, чтобы попробовать получить нулевой элемент массива. В нашем случае — текстовое поле присутствует, поэтому ошибок не возникнет даже если вместо опциональной последовательности установить принудительное извлечение опционала (поставить восклицательный знак). Тогда нам не нужна проверка на 10-ой строке. Ведь мы точно знаем, что текстовое поле у нас есть…
Но в нашем случае 10-ая и 11-ая строка кода это извлечение опциональных текстового поля и соответсвенно текста из этого поля. Причем нужно понимать, что текст в текстовом поле UITextField тоже опциональное значение, — ведь пользователь может и нечего не ввести.
В итоге мы передаем значение, полученное из текстового поля UITextField в метод updateRating(numericString:), который переводит полученное значение в Double, устанавливает рейтинг для чего-то и обновляет интерфейс, в соответствии с изменившимся чем-то.
Добавить комментарий