我创建了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方法。
因此显示的警报未显示,键盘开始弹出并返回。因此,如果要显示警报,则不会显示任何警报。
如果对流程有任何疑问,请问我。
我该如何纠正这个问题?
答案 0 :(得分:1)
取消设置alertView:willDismissWithButtonIndex:
- (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];
}