すべてをAlertViewからAlertControllerに切り替えていますが、AlertControllerのテキストフィールドにユーザーが入力した内容を取得するObjectiveCのオンラインのものが見つかりません。これが私が持っているものです:
if ([UIAlertController class]) {
UIAlertController *alertControllerK2 = [UIAlertController
alertControllerWithTitle:@"\u00A0"
message:@"Please enter the first number."
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *K2okAction = [UIAlertAction
actionWithTitle:@"OK"
style:UIAlertActionStyleDefault
handler:nil];
[alertControllerK2 addTextFieldWithConfigurationHandler:^(UITextField *K2TextField)
{
K2TextField.placeholder = NSLocalizedString(@"Please enter the first number.", @"Please enter the first number.");
}];
[alertControllerK2 addAction:K2okAction];
[self presentViewController:alertControllerK2 animated:YES completion:nil];
} else {
UIAlertView *alertK2;
alertK2 = [[UIAlertView alloc]
initWithTitle:@"\u00A0"
message:@"Please enter the first number."
delegate: self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
alertK2.alertViewStyle=UIAlertViewStylePlainTextInput;
[alertK2 show];
}
問題は、K2TextFieldがUIAlertController内で定義されているため、そのコードの外部からアクセスできないことです。しかし、事前に定義しようとすると、エラーメッセージが表示されます。どんな助けでも大歓迎です!
UIAlertController
にはtextFields
の配列があり、それらを追加したときの順序になっています(最初に追加したのはインデックス0です)。これはジェネリック配列であるため、text
フィールドにアクセスする前に結果をキャストする必要があります。
__weak UIAlertController *alertRef = alertController;
UIAlertAction* okAction = [UIAlertAction actionWithTitle:@"Button Text"
handler:^(UIAlertAction * action) {
// access text from text field
NSString *text = ((UITextField *)[alertRef.textFields objectAtIndex:0]).text;
}];
私の場合、スクリプトのさまざまなポイントでAlertControllerを再利用しているので、ヘッダーの.hファイルでグローバルにしました。
UIAlertController *alertController;
次に、実装.mファイルで、次のように現在のアラートに割り当てます。
alertController = (UIAlertController *)self.presentedViewController;
上記は、既存のアラートを取得してグローバルに割り当てます。これを機能させるには、最初に初期化するか、新しいものを作成する必要があります。
UIAlertController* anyALERTname = [UIAlertController alertControllerWithTitle:@"Alert Title" message:yourAlertMessage preferredStyle:UIAlertControllerStyleAlert];
現在のAlertControllerができたので、TextFieldにアクセス(および取得)できます。
if (alertController) {
//go and get the action field
UITextField *alertText1 = alertController.textFields.firstObject;
NSLog(@"what is alert text? %@",alertText1.text);
}