3

を使用してUIAlertViewいますが、次のエラー メッセージが表示されます。

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

しかしtextFields、私の中にはなく、UIAlertViewどこかにアクセスすることはありません...

これは私のコードです:

alertNewVersion = [[UIAlertView alloc] initWithTitle: @"Update"
                                            message: @"There is a new version"
                                            delegate: self
                                            cancelButtonTitle:@"OK"
                                            otherButtonTitles:@"Cancel",nil];
[alertNewVersion setAlertViewStyle:UIAlertViewStyleDefault];
alertNewVersion.tag = 1;
[alertNewVersion show];

ただし、「delegate:self」を「」に変更するdelegate:nilと、エラーでクラッシュすることはありませんが、もちろんデリゲート関数は機能しません...どのように問題が発生する可能性がありますか?

編集:

2 番目の UIAlertView:

- (IBAction)startPushed:(id)sender {

    message = [[UIAlertView alloc] initWithTitle:@"test."
                                        message:nil
                                        delegate:self
                                        cancelButtonTitle:nil
                                        otherButtonTitles:@"OK", nil];

    [message setAlertViewStyle:UIAlertViewStyleLoginAndPasswordInput];
    [[message textFieldAtIndex:1] setSecureTextEntry:NO];
    [[message textFieldAtIndex:0] setPlaceholder:@"xx"];
    [[message textFieldAtIndex:1] setPlaceholder:@"xxx"];
    message.tag = 2;
    [message show];

}

委任方法:

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {


if(alertView.tag == 1){ // alertNewVersion
    if (buttonIndex == 0) { //button "OK" clicked
       NSLog(@"test");
    }

}

if(alertView.tag == 2){ // Message

    if (buttonIndex == 0) { //button "OK" clicked
        NSString *Name = [[message textFieldAtIndex:0] text];
        [[NSUserDefaults standardUserDefaults] setObject:Name forKey:@"xx"]; 

        NSString *Class = [[message textFieldAtIndex:1] text];
        [[NSUserDefaults standardUserDefaults] setObject:Class forKey:@"xxx"]; 
    }
}

}
4

2 に答える 2

7

ここではtag、すべてに異なる設定を行い、以下のUIAlertViewコードを使用します...

ここで使用するとエラーが発生します。 alertNewVersion UIAlertViewその時点で textField が 0 インデックスで見つかり、ここでは配列がなく、ここでUITextFieldsアプリケーションがクラッシュしたため、次の条件を使用します...

アップデート:

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    if (alertView.tag == 1) {
        if (buttonIndex == 1) {
           /// do nothing here
        }
    }
    else if (alertView.tag == 2){
        NSString *title = [alertView buttonTitleAtIndex:buttonIndex];
       if([title isEqualToString:@"Ok"])
       {
           UITextField *txtName = [alertView textFieldAtIndex:0];
           UITextField *txtClass = [alertView textFieldAtIndex:1];
           NSLog(@"Name: %@\nClass: %@", txtName.text, txtClass.text);
       }
    }

}

上記の最初のコードの代わりにこのコードを使用してください...

UIAlertView *alt = [[UIAlertView alloc]initWithTitle:@"Update" message:@"There is a new version" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil];
alt.tag = 1;
[alt show];
[alt release];

メッセージについては、次のコードを参照してください...

//show alertview for message
- (IBAction)startPushed:(id)sender {
    UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"test."
                                                      message:nil
                                                     delegate:self
                                            cancelButtonTitle:nil
                                            otherButtonTitles:@"Ok", nil];



    [message setAlertViewStyle:UIAlertViewStyleLoginAndPasswordInput];
    UITextField *text1 = [message textFieldAtIndex:0];
    text1.placeholder=@"xxx";
    [[message textFieldAtIndex:1] setSecureTextEntry:NO];
    UITextField *text2= [message textFieldAtIndex:1];
    text2.placeholder=@"xxx";
    message.tag = 2;
    [message show];
}
于 2013-04-26T09:59:13.500 に答える
2

以下の方法で:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 

アラートビューに名前を付けて、以下のように好きなことをしてください:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 

    if(alertView == alertNewVersion)
    { 
    }   
    if(alertView == message)
    { 
    } 
}
于 2013-04-26T10:45:49.133 に答える