2016-07-31 5 views
0

Я написал код для предупреждения, появляющегося, когда вход в одном из моих UITextFields меньше 1050. Он успешно появляется, когда входы удовлетворяют этому, но после того, как я нажму «OK», мгновенно появляется снова.UIAlertController сохраняет повторное появление после его закрытия

Ниже приведен код в функции viewDidLoad:

override func viewDidLoad(){ 
    super.viewDidLoad() 
    alert = UIAlertController(title: "Error", message: "Please enter an exit width value greater than 1050", preferredStyle: UIAlertControllerStyle.Alert) 
    let okay = UIAlertAction(title: "OK", style: UIAlertActionStyle.Destructive, handler: valueCalc) 
    alert.addAction(okay) 
} 

Тогда у меня есть в моей valueCalc функции (которая вызывается при нажатии прослушивается):

@IBAction func valueCalc(sender: AnyObject){ 
    if(Int(mmText.text!)! < 1050){ //mmText is an UITextField 
     self.presentViewController(alert, animated: true, completion: nil) 
    } 
} 

ответ

4

Согласно вашей строке кода

let okay = UIAlertAction(title: "OK", style: UIAlertActionStyle.Destructive, handler: valueCalc) 

Ваше имя обработчика valueCalc вызывается при нажатии OK .

Снова вычисляется значение, которое при выходе меньше, чем указанные символы показывают вам предупреждение.

Вместо того, чтобы заменить эту строку в коде -

let okay = UIAlertAction(title: "OK", style: UIAlertActionStyle.Destructive, handler: handlerMethod) 

и добавить этот метод в код

func handlerMethod() { 

    //handle your action here after ok is pressed for e.g if you wanna just dismiss the alert then write 

    dismissViewControllerAnimated(true, completion: nil) 

} 
1

Вы имеете handler аргумент для вашего UIAlertAction установлен на valueCalc. Следовательно, всякий раз, когда пользователь нажимает «OK», метод valueCalc снова запускается, и поскольку значение (предположительно) остается неизменным, предупреждение появляется снова.

0

Попробуйте

override func viewDidLoad(){ 
    super.viewDidLoad() 
    alert = UIAlertController(title: "Error", message: "Please enter an exit width value greater than 1050", preferredStyle:  UIAlertControllerStyle.Alert) 

    let okay = UIAlertAction(
     title: "OK", 
     style: UIAlertActionStyle.Destructive) { (action) in } 

    } 

    @IBAction func valueCalc(sender: AnyObject){ 
    if(Int(mmText.text!)! < 1050){ //mmText is an UITextField 
    self.presentViewController(alert, animated: true, completion: nil) 
    } 
Смежные вопросы