我有一个使用其中的文本字段创建的警报视图。当我通过提交或取消按钮关闭alertview时,我在控制台中收到wait_fences错误。它没有崩溃,或者我没有能够让它崩溃,但我真的想知道发生了什么。
alert = [[UIAlertView alloc]
initWithTitle:@"Lookup"
message:@"\n\n\n"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"Submit", nil];
label = [[UILabel alloc] initWithFrame:CGRectMake(12, 40, 260, 25)];
label.font = [UIFont systemFontOfSize:16];
label.textColor = [UIColor whiteColor];
label.backgroundColor = [UIColor clearColor];
label.shadowColor = [UIColor blackColor];
label.shadowOffset = CGSizeMake(0, -1);
label.textAlignment = UITextAlignmentCenter;
label.text = @"Enter 10-Digit ISBN Number";
[alert addSubview:label];
field = [[UITextField alloc] initWithFrame:CGRectMake(16, 83, 252, 25)];
field.font = [UIFont systemFontOfSize:18];
field.backgroundColor = [UIColor whiteColor];
field.keyboardAppearance = UIKeyboardAppearanceAlert;
field.keyboardType = UIKeyboardTypeNumberPad;
field.borderStyle = UITextBorderStyleBezel;
field.delegate = self;
[field becomeFirstResponder];
[alert addSubview:field];
[alert show];
我在网上四处寻找,试图弄清问题是什么,有些人提到辞职第一响应者。我添加到 - (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex但它没有做任何事情。
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
[field resignFirstResponder]
if (buttonIndex == 1) {
NSLog(@"Submit");
} else {
NSLog(@"Cancel");
}
}
然后我添加了一个if语句来尝试找出field是否是第一个响应者而我什么也没得到。
if([field isFirstResponder]) {
NSLog(@"field isFirstResponder");
}
有没有人对我可能做错了什么有任何建议?
答案 0 :(得分:1)
所以我想我已经明白了。
似乎当我从alertView:didDismissWithButtonIndex调用[field resignFirstResponder]时,firstResponder不会真正辞职,并且在删除alertView之后键盘将被强制退出一两秒。但是当我从alertView:clickedButtonAtIndex调用[field resignFirstResponder]时,它会像它应该的那样重新签名firstResponder。
我也遇到了一个问题,因为在取消之前,alertview会向下移动,以补偿键盘不在那里,但为了解决这个问题,我创建了一个函数,其唯一目的是调用[field resignFirstResponder]并从中调用alertView:clickedButtonAtIndex并将其延迟运行.2秒。
答案 1 :(得分:0)
您是否尝试删除文字字段:
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
[[alertView.subviews objectAtIndex:0] removeFromSuperview];
}