我已更新Xcode 6.3和ios8.3检查我的代码。然后它给了我奇怪的结果。
这是我的演示应用的第一个屏幕。这是一个文本域。当我在textfield键盘打开时输入somethin。
输入完成后
。我点击了显示提醒按钮。我已经显示警报,输出将会跟随。
点击取消后。 我已经显示了另一个警报然后奇怪的结果键盘不应该打开但是当点击取消按钮时。显示另一个警报,键盘将自动出现。
这是下一个屏幕输出
以下是代码
- (IBAction)MethodShowAlert:(id)sender
{
[tmptxtField resignFirstResponder];
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Check Alert textField" message:@"keyboard should not be open" delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:nil];
[alert show];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
[self showCustomAlertWithTitle:nil];
}
-(void)showCustomAlertWithTitle:(NSString *)title{
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Now Check" message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles:nil, nil];
[alertView show]
}
答案 0 :(得分:19)
在我的情况下,我试图隐藏键盘,然后显示警告,所以它不会将键盘保存在内存中,以便在解除它后再次显示它。
为此您只需要关闭键盘,这将隐藏默认动画时间,然后您应该出现警报视图,然后它将不会保存该键盘。
你必须在隐藏键盘和提示警告
时留出大约0.6秒的差距 [YOUR_TEXT resignFirstResponder];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(.6 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
_alertVw = [[UIAlertView alloc] initWithTitle:@"" message:@"message." delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[_alertVw show];
});
答案 1 :(得分:15)
但是从iOS 8开始,我建议使用UIAlertController而不是UIAlertView。
用以下代码替换您的代码:
- (IBAction)MethodShowAlert:(id)sender
{
[tmptxtField resignFirstResponder];
UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"Check Alert textField"
message:@"keyboard should not be open"
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction * cancelAction = [UIAlertAction actionWithTitle:@"Cancel"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action) {
[self showCustomAlertWithTitle:@"Now Check"];
}];
[alertController addAction:cancelAction];
[self presentViewController:alertController animated:YES completion:nil];
}
-(void)showCustomAlertWithTitle:(NSString *)title{
UIAlertController * alertController = [UIAlertController alertControllerWithTitle:title
message:nil
preferredStyle:UIAlertControllerStyleAlert];
[self presentViewController:alertController animated:YES completion:nil];
}
点击按钮后键盘不会显示。
答案 2 :(得分:7)
这是iOS 8.3中引入的行为更改。尝试下载iOS 8.2模拟器,您将看到旧的行为。
我的分析结果如下:
所以在-[id<UIAlertViewDelegate> alertView:clickedButtonAtIndex:]
中,你处于这些状态之间。那么同时显示的两个警报会发生什么:
我的建议是使用在解雇动画完成后调用的UIAlertViewDelegate
方法,然后显示下一个警告。
答案 3 :(得分:0)
从以下方法替换警报方法。
UIAlertController * alertVC = [UIAlertController alertControllerWithTitle:messege title message:message preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *cancelAction = [UIAlertAction
actionWithTitle:@"OK"
style:UIAlertActionStyleCancel
handler:^(UIAlertAction *action)
{
}];
[alertVC addAction:cancelAction];
[[[[[UIApplication sharedApplication] windows] objectAtIndex:0] rootViewController] presentViewController:alertVC animated:YES completion:^{
}];
答案 4 :(得分:0)
我还尝试了在显示警报之前直接隐藏键盘。
对我有用的是呼叫[myTextField endEditing:YES];
而不是[myTextField resignFirstReponder];
这使键盘保持隐藏状态,即使再次关闭警报也是如此。
代码如下:
[myTextField endEditing:YES];
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"myTitle"
message:nil
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"NO"
style:UIAlertActionStyleCancel
handler:nil];
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"YES"
style:UIAlertActionStyleDefault
handler:nil];
[alertController addAction:cancelAction];
[alertController addAction:okAction];
[self presentViewController:alertController animated:YES completion:nil];