0

次のコードが実装されていますが、「理由: 'テキスト フィールド インデックス (0) はテキスト フィールドの配列の範囲外です'」というエラーが表示されます。

ポップアップ関数が発生した場合、ポップアップが表示されます

- (IBAction)popup:(id)sender{

    UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Post your message" message:@"\n\n\n" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil];
    UITextField *textField;
    textField = [[UITextField alloc] init];
    [textField setBackgroundColor:[UIColor whiteColor]];
    textField.delegate = self;
    textField.borderStyle = UITextBorderStyleLine;
    textField.frame = CGRectMake(15, 75, 255, 30);
    textField.font = [UIFont fontWithName:@"ArialMT" size:20];
    textField.placeholder = @"Post your message";
    textField.textAlignment = UITextAlignmentCenter;
    textField.keyboardAppearance = UIKeyboardAppearanceAlert;
    [textField becomeFirstResponder];
    [alert addSubview:textField];
    [alert show];


    //NSLog(@"%@",buttonIndex)

}

ここに画像の説明を入力

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

    NSString *value=[[alertView textFieldAtIndex:0]text];
    if (buttonIndex == 1) {
        if ([[alertView textFieldAtIndex:0].text length] > 0 ||
            [alertView textFieldAtIndex:0].text != nil ||
            [[alertView textFieldAtIndex:0].text isEqual:@""] == FALSE)
        {
           NSLog(@" textbox value here => %@",value);
        }
        else
        {
             NSLog(@" text box was empty ");
        }
    } else {
        NSLog(@" Cancel is pressed");
    }
}
4

2 に答える 2

3

問題はこの時点にあります[alertView textFieldAtIndex:0]。あなたの textField は 0 番目の位置にありません。NSLog(@"%@",[alertView subviews]);テキストフィールドが最初の位置ではなく、ついに配列にあることがわかる場合。したがって、この方法でテキストフィールドを取得してみてください。

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

    if (buttonIndex == 1) {
        NSLog(@"%@",[alertView subviews]);
        UITextField *txtField = [[alertView subviews] lastObject];
        if ([txtField.text length] > 0 ||
            txtField.text != nil ||
            [txtField.text isEqual:@""] == FALSE)
        {
            NSLog(@" textbox value here => %@",txtField.text);
        }
        else
        {
            NSLog(@" text box was empty ");
        }
    }
    else
    {
        NSLog(@" Cancel is pressed");
    }
}
于 2013-03-28T10:43:58.573 に答える
0

最初に、作成後にコードにこの行を追加するだけですUIAlertView

[alert setAlertViewStyle:UIAlertViewStylePlainTextInput];// you can use also another style like... `UIAlertViewStyleSecureTextInput` or `UIAlertViewStyleLoginAndPasswordInput`

そして、この以下のロジックを試してください..

//your other code
UITextField *textField = [[UITextField alloc] init];
textField.tag = 111; // just add this line...
//your other code..

そして、この以下のメソッドを置き換えるだけです...

- (void) alertView:(UIAlertView *) alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
   UITextField* myField = (UITextField*)[alertView viewWithTag:111];
   NSString *value = myField.text;
   if (buttonIndex == 1) {
      if ([[alertView textFieldAtIndex:0].text length] > 0 ||
        [alertView textFieldAtIndex:0].text != nil ||
        [[alertView textFieldAtIndex:0].text isEqual:@""] == FALSE)
      {
           NSLog(@" textbox value here => %@",value);
      }
      else
      {
           NSLog(@" text box was empty ");
      }
    } else {
       NSLog(@" Cancel is pressed");
    }
}
于 2013-03-28T10:40:12.790 に答える