web-dev-qa-db-ja.com

警告ビューでテキスト入力をユーザーに要求する方法

UIAlertViewのようなポップアップボックスを使用して、ユーザーにパスワードのようなテキストの入力を促すことができるのが最善のコードのセクションを書いています。これを行うためのエレガントな方法についてのポインタはありますか?

25
Nirma

私がこれを行うことがわかった最良の方法は、このチュートリアルに従うことです。 http://junecloud.com/journal/code/displaying-a-password-or-text-entry-Prompt-on-the -iphone.html

enter image description here

これを実現するために使用されるコードは、次のとおりです(そのすばらしいチュートリアルから直接取得)。

UIAlertView *passwordAlert = [[UIAlertView alloc] initWithTitle:@"Server Password" message:@"\n\n\n"
delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel",nil) otherButtonTitles:NSLocalizedString(@"OK",nil), nil];

UILabel *passwordLabel = [[UILabel alloc] initWithFrame:CGRectMake(12,40,260,25)];
passwordLabel.font = [UIFont systemFontOfSize:16];
passwordLabel.textColor = [UIColor whiteColor];
passwordLabel.backgroundColor = [UIColor clearColor];
passwordLabel.shadowColor = [UIColor blackColor];
passwordLabel.shadowOffset = CGSizeMake(0,-1);
passwordLabel.textAlignment = UITextAlignmentCenter;
passwordLabel.text = @"Account Name";
[passwordAlert addSubview:passwordLabel];

UIImageView *passwordImage = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"passwordfield" ofType:@"png"]]];
passwordImage.frame = CGRectMake(11,79,262,31);
[passwordAlert addSubview:passwordImage];

UITextField *passwordField = [[UITextField alloc] initWithFrame:CGRectMake(16,83,252,25)];
passwordField.font = [UIFont systemFontOfSize:18];
passwordField.backgroundColor = [UIColor whiteColor];
passwordField.secureTextEntry = YES;
passwordField.keyboardAppearance = UIKeyboardAppearanceAlert;
passwordField.delegate = self;
[passwordField becomeFirstResponder];
[passwordAlert addSubview:passwordField];

[passwordAlert setTransform:CGAffineTransformMakeTranslation(0,109)];
[passwordAlert show];
[passwordAlert release];
[passwordField release];
[passwordImage release];
[passwordLabel release];
16
PengOne

IOS 5では物事がはるかに簡単になりました。alertViewStyleプロパティを適切なスタイル(UIAlertViewStyleSecureTextInput、UIAlertViewStylePlainTextInput、またはUIAlertViewStyleLoginAndPasswordInput)に設定するだけです。例:

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Password" message:@"Enter your password:" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil];
alertView.alertViewStyle = UIAlertViewStyleSecureTextInput;
UITextField *passwordTextField = [alertView textFieldAtIndex:0];
[alertView show];
117
xcoder

enter image description here>シンプルこのように応募できます

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Filename" message:@"Enter the file name:" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil];
alertView.alertViewStyle = UIAlertViewStylePlainTextInput;
UITextField *passwordTextField = [alertView textFieldAtIndex:0];
[alertView show]
28
Vineesh TP

私のアプリがまだ1〜2か月間リリースされていなかった場合は、 http://developer.Apple.com にログインし、iOS 5ベータエリアを確認して、UIAlertViewに何かがあるかもしれません。

6
PeyloW

UIAlertViewがモーダルではないため、アラートがブロックされないことを知っておくと役に立ちます。

この問題に遭遇したのは、ユーザーに入力を要求して続行し、その後コードでその入力を使用したかったからです。ただし、代わりに[alert show]の後のコードが最初に実行され、実行ループの最後に到達するまでアラートが表示されます。

最適化されたコード:

UIAlertView *passwordAlert = [[UIAlertView alloc] initWithTitle:@"Password"
                                                        message:@"Please enter the password:\n\n\n"
                                                       delegate:self
                                              cancelButtonTitle:NSLocalizedString(@"Cancel",nil)
                                              otherButtonTitles:NSLocalizedString(@"OK",nil), nil];

UITextField *passwordField = [[UITextField alloc] initWithFrame:CGRectMake(16,83,252,25)];
passwordField.borderStyle = UITextBorderStyleRoundedRect;
passwordField.secureTextEntry = YES;
passwordField.keyboardAppearance = UIKeyboardAppearanceAlert;
passwordField.delegate = self;
[passwordField becomeFirstResponder];
[passwordAlert addSubview:passwordField];

[passwordAlert show];
[passwordAlert release];
[passwordField release];
1
Dmitry