2016-04-21 47 views
5

Ho uno UIAlertController (stile di avviso) in Swift e tutto funziona perfettamente. Tuttavia, lo UITextField che ho aggiunto è un campo facoltativo a cui l'utente non è obbligato a inserire il testo. Il problema è quando mostro questo UIAlertController, la tastiera appare simultaneamente con il campo di testo selezionato per impostazione predefinita. Non voglio che la tastiera appaia a meno che l'utente non tocchi il numero UITextField. Come si può fare?Impedisce la visualizzazione automatica della tastiera con UIAlertController

let popup = UIAlertController(title: "My title", 
     message: "My message", 
     preferredStyle: .Alert) 
    popup.addTextFieldWithConfigurationHandler { (optionalTextField) -> Void in 
     optionalTextField.placeholder = "This is optional" 
    } 
    let submitAction = UIAlertAction(title: "Submit", style: .Cancel) { (action) -> Void in 
     let optionalTextField = popup.textFields![0] 
     let text = optionalTextField.text 
     print(text) 
    } 
    let cancelAction = UIAlertAction(title: "Cancel", style: .Default, handler: nil) 
    popup.addAction(cancelAction) 
    popup.addAction(submitAction) 
    self.presentViewController(popup, animated: true, completion: nil) 
+2

è necessario essere fare becomeFirstResponder chiamare da qualche altra parte. Oppure puoi chiamare self.view endEditing: YES dopo/prima di presentare l'avviso. –

risposta

4

questo dovrebbe fare il trucco:

rendere il vostro viewController conforme alle UITextFieldDelegate

assegnare il popup.textFields![0].delegate-self

aggiungere tag unica per popup.textFields![0] (io ho usato 999 nell'esempio qui sotto)

implementare questo

func textFieldShouldBeginEditing(textField: UITextField) -> Bool { 
    if textField.tag == 999 { 
    textField.tag = 0 
    return false 
    }else{ 
    return true 
    } 
} 

il codice dovrebbe essere simile a questo:

let popup = UIAlertController(title: "My title", 
            message: "My message", 
            preferredStyle: .Alert) 
    popup.addTextFieldWithConfigurationHandler { (optionalTextField) -> Void in 
     optionalTextField.placeholder = "This is optional" 
    } 
    popup.textFields![0].delegate = self 
    popup.textFields![0].tag = 999 
    let submitAction = UIAlertAction(title: "Submit", style: .Cancel) { (action) -> Void in 
     let optionalTextField = popup.textFields![0] 
     let text = optionalTextField.text 
     print(text) 
    } 
    let cancelAction = UIAlertAction(title: "Cancel", style: .Default, handler: nil) 
    popup.addAction(cancelAction) 
    popup.addAction(submitAction) 
    self.presentViewController(popup, animated: true, completion: nil) 
+1

haha ​​grandi menti pensano allo stesso modo eh: P –

3

Credo che questo sia il comportamento predefinito per un textField in un avviso, forse considerare un design alternativo in modo che il campo di testo mostra solo quando è necessario ...

Ora con quello fuoristrada cerchiamo di aggirare questo!

Quando si aggiunge il campo testo, rendere il proprio viewController è delegato e aggiungere un tag.

esempio

popup.addTextFieldWithConfigurationHandler { (optionalTextField) -> Void in 
    optionalTextField.placeholder = "This is optional" 
    optionalTextField.delegate = self 
    optionalTextField.tag = -1 
} 

quindi implementare textFieldShouldBeginEditing()

func textFieldShouldBeginEditing(textField: UITextField!) { 
    if textField.tag == -1 { 
     textField.tag = 0 
     return false 
    } else { 
     return true 
    } 
}