6

内部に 2 つの uitextfields を含むアラートビューを作成したいと考えています。

method:
//show alertview for file input
- (IBAction)showAddFiles:(id)sender {
    UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Enter File Details"
                                                      message:nil
                                                     delegate:self
                                            cancelButtonTitle:@"Cancel"
                                            otherButtonTitles:@"Add", nil];



    UITextField *textFieldDescription = [message textFieldAtIndex:0];
    textFieldDescription.placeholder = @"File Description : Ex. Acat Briefing";
    UITextField *textFieldFileName = [message textFieldAtIndex:1];
    textFieldFileName.placeholder = @"Exact File Name : Ex. acat.pdf";


    [message show];
}


//make sure file description is long enoguh
- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView
{
    NSString *inputText = [[alertView textFieldAtIndex:0] text];

    if( [inputText length] <= 15 && [inputText length] >= 4)
    {
        return YES;
    }
    else
    {
        return NO;
    }
}

//handle add button
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    NSString *title = [alertView buttonTitleAtIndex:buttonIndex];
    if([title isEqualToString:@"Add"])
    {
        UITextField *fileDescription = [alertView textFieldAtIndex:0];
        UITextField *fileName = [alertView textFieldAtIndex:1];
        NSLog(@"Desc: %@\nName: %@", fileDescription.text, fileName.text);
    }
}

エラー:

* キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了します。理由: 'textFieldIndex (0) はテキスト フィールドの配列の範囲外です'

このエラーが発生するのはなぜですか? アラート ビューで 2 つの uitextfields を作成するにはどうすればよいですか?

=========実用的なソリューション=========== 以下の回答に感謝します。2つのプレーンテキストフィールドのみが必要な場合に機能します

//show alertview for file input
- (IBAction)showAddFiles:(id)sender {
    UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Enter File Details"
                                                      message:nil
                                                     delegate:self
                                            cancelButtonTitle:@"Cancel"
                                            otherButtonTitles:@"Add", nil];



    [message setAlertViewStyle:UIAlertViewStyleLoginAndPasswordInput];
    UITextField *fileDescription = [message textFieldAtIndex:0];
    fileDescription.placeholder=@"Ex. acat.pdf";
    [[message textFieldAtIndex:1] setSecureTextEntry:NO];
    UITextField *fileName= [message textFieldAtIndex:1];
    fileName.placeholder=@"Ex. Acat Briefing";

    [message show];
}
4

5 に答える 5

24

「メッセージ」アラートビューを割り当てた後。これをコードに追加します。

[message setAlertViewStyle:UIAlertViewStyleLoginAndPasswordInput];
[[message textFieldAtIndex:1] setSecureTextEntry:NO];

これにより、アラートが 2 つのテキスト フィールド内に表示されます。

于 2012-11-05T15:32:02.577 に答える
4

UIAlertView「メッセージ」にテキスト フィールドがないため、表示されたエラーが発生します。、、UIAlertView などの特定のスタイルで作成された 内の textFields にアクセスするために、インスタンス メソッド「textFieldAtIndex」が存在します。これらのスタイルは、プロパティ「alertViewStyle」で設定されます。例えば:UIAlertViewStylePlainTextInputUIAlertViewStyleSecureTextInputUIAlertViewStyleLoginAndPasswordInput

[message setAlertViewStyle:UIAlertViewStylePlainTextInput];

このプロパティを設定した後に "textFieldAtIndex" を使用することもできますが、残念ながら、これらのスタイルのいずれもニーズに合わないようです。

私が以前に行ったことは、(既に行ったように) デフォルトのスタイルの UIAlertView を作成し、UITextFields をサブビューとして UIAlertView に追加することです。

例えば:

//Create the alert then add any labels and text fields as subviews.
//You can pad out an alertView by adding newline characters in the message.  This will
// give the alertView more space to draw the text fields.
UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Two Text Field Alert" 
                                                         message:@"\n\n\n\n\n" 
                                                        delegate:self 
                                               cancelButtonTitle:@"CanceL" 
                                               otherButtonTitles:@"OK", nil];

UITextField *textField1 = [[UITextField alloc] initWithFrame:CGRectMake(16,83,252,25)];
textField1.borderStyle = UITextBorderStyleRoundedRect;
textField1.keyboardAppearance = UIKeyboardAppearanceAlert;
textField1.delegate = self;
[message addSubview:textField1];

UITextField *textField2 = [[UITextField alloc] initWithFrame:CGRectMake(16,112,252,25)];
textField2.placeholder = @"Password";
textField2.borderStyle = UITextBorderStyleRoundedRect;
textField2.keyboardAppearance = UIKeyboardAppearanceAlert;
textField2.delegate = self;
[message addSubview:textField2];
[message show];

[message release];
[textField2 release];
[textField1 release];

alertView スタイルとは対照的に、この方法でログインを行うのははるかに冗長で面倒ですが、アラート ビューに任意の数のサブビューを追加するのに適していると思われる場合は、これを適応させることができます。

例を単純化するために編集されました。

于 2012-11-05T15:46:12.080 に答える
3

UIAlertViewにはテキストフィールドが含まれていないため、このエラーが発生しています。を呼び出そうとすると、アラート ビューの textfield コレクションが空[alertView textFieldAtIndex:0]であるためNSInvalidArgumentException、クラッシュが発生します。

于 2012-11-05T15:36:14.863 に答える
0

これがあなたの質問に対する解決策です.. http://www.alterplay.com/ios-dev-tips/2009/12/username-and-password-uitextfields-in-uialertview-prompt.html

于 2012-11-05T15:30:42.343 に答える