這裏的 '乾淨的複製/粘貼' 版本:
斯威夫特3:
let alert = UIAlertController(title: "Alert Title",
message: "Alert message",
preferredStyle: UIAlertControllerStyle.alert)
let ok = UIAlertAction(title: "OK",
style: UIAlertActionStyle.default) { (action: UIAlertAction) in
if let alertTextField = alert.textFields?.first, alertTextField.text != nil {
print("And the text is... \(alertTextField.text!)!")
}
}
let cancel = UIAlertAction(title: "Cancel",
style: UIAlertActionStyle.cancel,
handler: nil)
alert.addTextField { (textField: UITextField) in
textField.placeholder = "Text here"
}
alert.addAction(ok)
alert.addAction(cancel)
self.present(alert, animated: true, completion: nil)
斯威夫特2:
let alert = UIAlertController(title: "Alert Title",
message: "Alert message",
preferredStyle: UIAlertControllerStyle.Alert)
let ok = UIAlertAction(title: "OK",
style: UIAlertActionStyle.Default) { (action: UIAlertAction) in
if let alertTextField = alert.textFields?.first where alertTextField.text != nil {
print("And the text is... \(alertTextField.text!)!")
}
}
let cancel = UIAlertAction(title: "Cancel",
style: UIAlertActionStyle.Cancel,
handler: nil)
alert.addTextFieldWithConfigurationHandler { (textField: UITextField) in
textField.placeholder = "Text here"
}
alert.addAction(ok)
alert.addAction(cancel)
self.presentViewController(alert, animated: true, completion: nil)
目標C:
UIAlertController *alert = [UIAlertController
alertControllerWithTitle: @"Alert Title"
message: @"Alert message"
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *ok = [UIAlertAction actionWithTitle: @"OK" style: UIAlertActionStyleDefault
handler:^(UIAlertAction *action){
UITextField *alertTextField = alert.textFields.firstObject;
NSLog(@"And the text is... %@!", alertTextField.text);
}];
UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel
handler: nil];
[alert addTextFieldWithConfigurationHandler:^(UITextField *textField) {
textField.placeholder = @"Text here";
}];
[alert addAction:ok];
[alert addAction:cancel];
[self presentViewController:alert animated:YES completion:nil];
以前的答案:
編輯: - 請注意:目前,原來的問題似乎是工作原樣。
澄清:調用addTextFieldWithConfigurationHandler
後
的UIAlertController
實例應該持有它的文本框數組文本字段。
UIAlertController *alertController = ...// Create alert
// Assuming you called 'addTextFieldWithConfigurationHandler' on 'alertController'
UIAlertAction *action = [UIAlertAction actionWithTitle: ... handler:^(UIAlertAction * action) {
// alertController.textFields should hold the alert's text fields.
}
如果由於某種原因不是,請說明更多的信息(因爲這個問題仍然受到關注)。 (通過一些評論)似乎有些人對此有一些問題,但沒有提供超出「無效」的信息。
原來的答覆:
您的代碼看起來不錯,它應該工作。
另一種方法是從addTextFieldWithConfigurationHandler
定義UITextField
前UIAlertController *alert=...
UITextField *myTf;
傳遞文本字段:
[alert addTextFieldWithConfigurationHandler:^(UITextField *textField) {
textField.placeholder = @"Enter the name of the recipe";
textField.keyboardType = UIKeyboardTypeDefault;
myTf = textField;
}];
然後在:
UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action){...
//UITextField *temp = alert.textFields.firstObject;
// Get the text from your textField
NSString *temp = myTf.text;
- 編輯
原來的海報代碼現在的作品是(在Xcode 7,iOS 9下測試)。可能是以前版本中的一個錯誤。可能是在以前的版本中,textField
被一個弱引用所控制,並被釋放,除非另一個強指針持有它。
嘗試在同一個塊中插入'NSLog(@「alert.textFields:%@」,alert.textFields);''。 – bauerMusic
好的,我做了NSLog並得到了這個:alert。textFields:( 「<_UIAlertControllerTextField:0x7b941230; frame =(4 4; 229.333 16); text ='yyyy'; clipsToBounds = YES; opaque = NO; gestureRecognizers =; layer = > 「 ) 請參閱我輸入的text =」yyyy「。那麼如何讓文本進入我的字符串? –