2016-04-21 17 views
5

Mam UIAlertController (Styl alertu) w Swift i wszystko działa dobrze. Jednak dodany do niego UITextField jest opcjonalnym polem, do którego użytkownik nie musi wprowadzać tekstu. Problem polega na tym, że kiedy pokazuję tę UIAlertController, klawiatura pojawia się jednocześnie z domyślnie wybranym polem tekstowym. Nie chcę, aby klawiatura pojawiała się, chyba że użytkownik dotknie UITextField. Jak to zrobić?Zapobieganie automatycznemu pojawianiu się klawiatury za pomocą 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

trzeba być co becomeFirstResponder zadzwonić gdzieś indziej. Możesz też wywołać self.view, endEdytując: TAK po/przed wyświetleniem alertu. –

Odpowiedz

4

to powinno załatwić sprawę:

dokonać viewController zgodne UITextFieldDelegate

przypisać popup.textFields![0].delegate do self

dodać unikalny tag popup.textFields![0] (użyłem 999 w przykładzie poniżej)

zrealizować ten

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

Twój kod powinien wyglądać tak:

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 ​​wielkie umysły myślą tak samo eh: P –

3

Myślę, że to zachowanie domyślne dla textField w pogotowiu, może rozważyć alternatywną konstrukcję tak, że pole tekstowe pokazuje tylko, gdy jest to konieczne ...

Teraz, gdy zejdziemy z drogi, omińmy to!

Po dodaniu textField należy uczynić viewController swoim delegatem i dodać do niego znacznik.

np

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

następnie wdrożyć textFieldShouldBeginEditing()

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