Пример UIAlertController

Теоретическую часть A​ction​S​heet, 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, устанавливает рейтинг для чего-то и обновляет интерфейс, в соответствии с изменившимся чем-то.

Метки: ,

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.