如何区分UIAlertView取消和UIAlertViewStyleSecureTextInput的TextView Return?

时间:2013-05-17 07:16:57

标签: iphone ios ipad uitextfield uialertview

我创建了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;

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

- (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,然后拨打警报代表。并且它再次调用alert delegate方法。

因此显示的警报未显示,键盘开始弹出并返回。因此,如果要显示警报,则不会显示任何警报。

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

我该如何纠正这个问题?

5 个答案:

答案 0 :(得分:1)

取消设置alertView:willDismissWithButtonIndex:

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

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

除此之外,更好的设计是取消按钮“取消”,另一个按钮“提交”。当textField结束时,您通过“提交”而不是“取消”来解除提醒。

答案 1 :(得分:0)

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

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

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

    if(buttonIndex == 1) {
        [[alert textFieldAtIndex:0] resignFirstResponder];
    }
}

答案 2 :(得分:0)

试试这个条件..因为当Pin不存在时你不想要警告消失......

- (void)textFieldDidEndEditing:(UITextField *)textField
    {
       if([textField.text length]!=0)
         [alert dismissWithClickedButtonIndex:0 animated:YES];
    }

答案 3 :(得分:0)

如果你想在“取消”按钮上隐藏UIAlertiView,那么只需将此代码添加到clickedButtonAtIndex:

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
     if(buttonIndex == 1)
     {
          [[alert textFieldAtIndex:0] resignFirstResponder];
     } 
}

答案 4 :(得分:-1)

试试这个

按照委托方法

添加UIAlertView

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

{

[[alert textFieldAtIndex:0] resignFirstResponder];

}