Uzyskaj wartość wejściową z TextField w alercie systemu iOS w języku Swift
122
Próbuję utworzyć komunikat ostrzegawczy z danymi wejściowymi, a następnie uzyskać wartość z danych wejściowych. Znalazłem wiele dobrych samouczków, jak utworzyć pole tekstu wejściowego. ale nie mogę uzyskać wartości z alertu.
//1. Create the alert controller.let alert =UIAlertController(title:"Some Title", message:"Enter a text", preferredStyle:.alert)//2. Add the text field. You can configure it however you need.alert.addTextField {(textField)in
textField.text ="Some default text"}// 3. Grab the value from the text field, and print it when the user clicks OK.alert.addAction(UIAlertAction(title:"OK", style:.default, handler:{[weak alert](_)inlet textField = alert.textFields![0]// Force unwrapping because we know it exists. print("Text field: \(textField.text)")}))// 4. Present the alert.self.present(alert, animated:true, completion:nil)
Swift 2.x
Zakładając, że chcesz alert akcji na iOS:
//1. Create the alert controller. var alert =UIAlertController(title:"Some Title", message:"Enter a text", preferredStyle:.Alert)//2. Add the text field. You can configure it however you need.alert.addTextFieldWithConfigurationHandler({(textField)->Voidin
textField.text ="Some default text."})//3. Grab the value from the text field, and print it when the user clicks OK. alert.addAction(UIAlertAction(title:"OK", style:.Default, handler:{[weak alert](action)->Voidinlet textField = alert.textFields![0]asUITextField
println("Text field: \(textField.text)")}))// 4. Present the alert.self.presentViewController(alert, animated:true, completion:nil)
Żaden problem. Pamiętaj, aby oznaczyć to jako zaakceptowane, jeśli ci to pomogło. Dzięki!
Andy Ibanez
Cześć, @AndyIbanez Próbuję zaimplementować Twój kod w mojej aplikacji, ale pokazuje on błąd „Użyj niezadeklarowanego identyfikatora var” Jestem nowy w Xcode, więc przepraszam, jeśli jest to podstawowy błąd w moim imieniu
Sjharrison
@Sjharrison Mój kod jest dla Swift. Jedynym powodem, dla którego mogę sobie wyobrazić, że spowodowałoby to kłopoty ze varsłowem kluczowym, jest to, że pisałeś w Objective-C.
Andy Ibanez
1
Czy ktoś może wyjaśnić, dlaczego [weak alert]? Patrzę na Swift 3.
Andrej
3
W przypadku alertu Swift 3 w kroku 3. jest opcjonalne, potrzebne jest „?” let textField = alert?.textFields![0] // Force unwrapping because we know it exists.print("Text field: \(textField?.text)")
James,
27
Swift 3/4
Możesz użyć poniższego rozszerzenia dla swojej wygody.
Użycie wewnątrz ViewController:
showInputDialog(title:"Add number",
subtitle:"Please enter the new number below.",
actionTitle:"Add",
cancelTitle:"Cancel",
inputPlaceholder:"New number",
inputKeyboardType:.numberPad){(input:String?)in
print("The new number is \(input ?? "")")}
pamiętaj tylko, że jeśli zamierzasz zaprezentować akcję "Dodaj", upewnij się, że styl jest "domyślny", a nie "destrukcyjny" - alert.addAction (UIAlertAction (tytuł: actionTitle, style: .default ...
Bishal Ghimire
13
W Swift5 i Xcode 10
Dodaj dwa pola tekstowe z akcjami Zapisz i Anuluj i przeczytaj dane tekstowe TextFields
func alertWithTF(){//Step : 1
let alert =UIAlertController(title:"Great Title", message:"Please input something", preferredStyle:UIAlertController.Style.alert )//Step : 2
let save =UIAlertAction(title:"Save", style:.default){(alertAction)inlet textField = alert.textFields![0]asUITextFieldlet textField2= alert.textFields![1]asUITextFieldif textField.text !=""{//Read TextFields text data
print(textField.text!)
print("TF 1 : \(textField.text!)")}else{
print("TF 1 is Empty...")}if textField2.text !=""{
print(textField2.text!)
print("TF 2 : \(textField2.text!)")}else{
print("TF 2 is Empty...")}}//Step : 3
//For first TF
alert.addTextField {(textField)in
textField.placeholder ="Enter your first name"
textField.textColor =.red
}//For second TF
alert.addTextField {(textField)in
textField.placeholder ="Enter your last name"
textField.textColor =.blue
}//Step : 4
alert.addAction(save)//Cancel action
let cancel =UIAlertAction(title:"Cancel", style:.default){(alertAction)in}
alert.addAction(cancel)//OR single line action
//alert.addAction(UIAlertAction(title: "Cancel", style: .default) { (alertAction) in })
self.present(alert, animated:true, completion:nil)}
Odpowiedzi:
Zaktualizowano dla Swift 3 i nowszych:
Swift 2.x
Zakładając, że chcesz alert akcji na iOS:
źródło
var
słowem kluczowym, jest to, że pisałeś w Objective-C.[weak alert]
? Patrzę na Swift 3.let textField = alert?.textFields![0] // Force unwrapping because we know it exists.
print("Text field: \(textField?.text)")
Swift 3/4
Możesz użyć poniższego rozszerzenia dla swojej wygody.
Użycie wewnątrz
ViewController
:Kod rozszerzenia:
źródło
W Swift5 i Xcode 10
Dodaj dwa pola tekstowe z akcjami Zapisz i Anuluj i przeczytaj dane tekstowe TextFields
Aby uzyskać więcej informacji, https://medium.com/@chan.henryk/alert-controller-with-text-field-in-swift-3-bda7ac06026c
źródło