1. ホーム
  2. iphone

[解決済み] iPhoneでテキスト入力のポップアップダイアログボックスを表示する簡単な方法は?

2022-07-03 03:57:51

質問

ユーザー名を取得したい。 単純なテキスト入力のダイアログボックスです。 これを行うための任意の簡単な方法?

どのように解決するのですか?

iOS 5 では、新しい 簡単な という方法があります。のような優雅なものではないので、まだ実装が完全に完成しているとは言えません。 UITableViewCell のような潔いものではありませんので、まだ完全な実装とは言えませんが、iOSのAPIで標準的にサポートされていますので、間違いなくトリックを実行できるはずです。このためにプライベート API は必要ありません。

UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"This is an example alert!" delegate:self cancelButtonTitle:@"Hide" otherButtonTitles:nil];
alert.alertViewStyle = UIAlertViewStylePlainTextInput;
[alert show];
[alert release];

このようにalertViewをレンダリングします(XCode 4.2のiPhone 5.0シミュレータで撮影したスクリーンショット)。

何かボタンを押すと、通常のデリゲートメソッドが呼び出されるので、そこでtextInputを以下のように抽出することができます。

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
    NSLog(@"Entered: %@",[[alertView textFieldAtIndex:0] text]);
}

ここでは、入力された結果をNSLogしているだけです。プロダクションコードでは、alertViewへのポインタをグローバル変数として保持するか、alertViewタグを使用して、デリゲート関数が適切に呼び出されたかどうかをチェックする必要があるでしょう。 UIAlertView によって呼び出されたかどうかを確認する必要がありますが、この例ではこれで大丈夫でしょう。

をチェックアウトする必要があります。 UIAlertView API をチェックすると、さらにいくつかのスタイルが定義されているのがわかるでしょう。

お役に立ったでしょうか?

-- EDIT --

alertViewを少し弄っていたのですが、textFieldを好きなように編集することが完全に可能であることは発表するまでもないでしょう:textFieldに参照を作成して UITextField への参照を作成し、通常通り(プログラム的に)それを編集することができます。 これを行うには、私はあなたが最初の質問で指定したようにalertViewを構築しました。遅かれ早かれ、ですね:-)?

UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Hello!" message:@"Please enter your name:" delegate:self cancelButtonTitle:@"Continue" otherButtonTitles:nil];
alert.alertViewStyle = UIAlertViewStylePlainTextInput;
UITextField * alertTextField = [alert textFieldAtIndex:0];
alertTextField.keyboardType = UIKeyboardTypeNumberPad;
alertTextField.placeholder = @"Enter your name";
[alert show];
[alert release];

このようなアラートが出ます。

先ほどのポスターと同じデリゲートメソッドを使って、入力から結果を処理することができます。を防げるかどうかは分かりませんが。 UIAlertView が解除されるのを防げるかどうかは分かりませんが( shouldDismiss デリゲート関数がないAFAIK) ので、ユーザ入力が無効な場合は、新しいアラートを出す必要があると思います (または、単に再度の show この1つを)正しい入力がされるまで、新しい警告を出さなければならないと思います。

楽しんでください。