2016-04-21 20 views
5

Ich habe eine UIAlertController (Alert-Stil) in Swift und alles funktioniert gut. Die UITextField, die ich hinzugefügt habe, ist jedoch ein optionales Feld, in das der Benutzer keinen Text eingeben muss. Das Problem ist, wenn ich diese UIAlertController zeige, erscheint die Tastatur gleichzeitig mit dem standardmäßig ausgewählten Textfeld. Ich möchte nicht, dass die Tastatur angezeigt wird, außer der Benutzer tippt auf UITextField. Wie kann das gemacht werden?verhindern, dass Tastatur automatisch mit 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

müssen Sie woanders becomeFirstResponder nennen werden, zu machen. Oder Sie können self.view endEditing aufrufen: JA, nachdem/bevor Sie den Alarm anzeigen. –

Antwort

4

dies den Trick tun soll:

machen Sie Ihren Viewcontroller entspricht UITextFieldDelegate

zuweisen die popup.textFields![0].delegate-self

hinzufügen einzigartigen Tag popup.textFields![0] (i unten im Beispiel 999)

implementieren diese

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

Ihr Code soll wie folgt aussehen:

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 ​​große Köpfe denken gleich eh: P –

3

Ich denke, das das Standardverhalten für ein Textfeld in einer Warnung ist, vielleicht eine alternative Konstruktion zu berücksichtigen, so dass das Textfeld nur bis zeigt, wenn es notwendig ist, ...

Jetzt mit dem aus dem Weg lassen Sie uns dies umgehen!

Wenn Sie das TextField hinzufügen, machen Sie Ihren ViewController zu einem Delegaten und fügen Sie ein Tag hinzu.

zB

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

dann implementieren textFieldShouldBeginEditing()

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