1

我创建了一个UIAlertView

alert = [[UIAlertView alloc] initWithTitle:@"Test"
                                   message:@"Working"
                                  delegate:self
                         cancelButtonTitle:@"Ok"
                         otherButtonTitles:nil];

[alert setAlertViewStyle:UIAlertViewStyleSecureTextInput]; 
alert.tag = kAlertTypePIN;

UITextField *textField = [alert textFieldAtIndex:0];
textField.delegate = self;

如果我在文本字段中按 Retun 键,UIAlertView它可以正常工作,它会调用:

- (void)textFieldDidEndEditing:(UITextField *)textField
{
   [alert dismissWithClickedButtonIndex:0 animated:YES];
}

接着

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
  NSLog(@"didDismissWithButtonIndex");
  // If no text or wrong text show alert again otherwise normal actions
}

但是,如果我按下取消按钮,它会第一次调用textFieldDidEndEditing,然后调用警报代表。它再次自己调用警报委托方法。

所以要显示的警报没有显示出来,键盘开始弹出并返回。因此,如果要显示它,则不会显示任何警报。

如果对流程有任何疑问,请问我。

我该如何纠正这个问题?

4

5 回答 5

1

取消设置 textField 的委托alertView:willDismissWithButtonIndex:

- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex {
    UITextField *textField = [alert textFieldAtIndex:0];
    textField.delegate = nil;
}

当警报被解除时,textField 将结束编辑,然后它将调用textFieldDidEndEditing:委托方法。
如果在解雇开始之前将委托设置为 nil,则无法调用委托方法。

除此之外,更好的设计是有一个取消按钮"Cancel"和另一个按钮"Submit"。结束时,您使用"Submit"textField关闭警报,而不是"Cancel"

于 2013-05-17T07:43:33.800 回答
0

如果您想在“取消”按钮单击时隐藏 UIAlertiView,只需将此代码添加到 clickedButtonAtIndex:

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
     if(buttonIndex == 1)
     {
          [[alert textFieldAtIndex:0] resignFirstResponder];
     } 
}
于 2013-05-17T10:26:34.453 回答
0

您只是想UIAlertiView在取消点击时隐藏?

然后,如果您的取消buttonindex为 1,则:

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

    if(buttonIndex == 1) {
        [[alert textFieldAtIndex:0] resignFirstResponder];
    }
}
于 2013-05-17T07:31:33.480 回答
0

试试这个条件..因为你不希望当 Pin 不存在时警报消失......

- (void)textFieldDidEndEditing:(UITextField *)textField
    {
       if([textField.text length]!=0)
         [alert dismissWithClickedButtonIndex:0 animated:YES];
    }
于 2013-05-17T07:32:25.303 回答
-1

尝试这个

在委托方法之后添加 UIAlertView

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

{

[[alert textFieldAtIndex:0] resignFirstResponder];

}

于 2013-05-17T07:28:29.767 回答