Hel*_*len 34 uialertview ipad ios ios8.3
使用最新的iOS 8.3版本,我们的应用程序开始出现奇怪的行为.
完成文本字段编辑后,用户可以单击关闭按钮,显示一个UIAlertView
.当用户在alertview中单击discard时,将取消alertview和当前视图.但不知何故,键盘在视图消失后显示出来,这对用户来说非常烦人.
经过一些调试后,似乎键盘显示的是用户在关闭视图之前访问过的最后一个文本字段.我endEditing
在许多地方尝试了各种方法来获取当前视图(在显示之前UIAlertView
,单击按钮之后UIAlertView
;我甚至将焦点设置为视图的另一个UI元素).它没有解决问题.
但对于这个特殊问题,我不确定这是一个常见问题还是我们需要解决的问题.一切都在iOS 8.3之前完美运行.
我们知道UIAlertView
iOS 8已弃用.我们已开始迁移到UIAlertController
.但如果有任何解决方法,我们很乐意听到.
这是一些代码片段.
- (IBAction)closeTapped:(UIButton *)sender
{
// try to resign first responder
// [self.tfName resignFirstResponder];
// [self.tfPosition resignFirstResponder];
[self.view endEditing:YES];
if(self.orderDetails.isOpen && self.orderItemChanged)
{
UIAlertView* saveAlert = [[UIAlertView alloc] initWithTitle:@"Unsaved Changes"
message:@"Your changes have not been saved. Discard changes?"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"Save", @"Discard", nil];
[saveAlert show];
}
else
{
[self close];
}
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
switch(buttonIndex)
{
case 1: // Save
{
[self save];
break;
}
case 2: // Discard
{
[self close];
break;
}
}
}
- (void)close
{
[self.delegate dismissEditOrderItemVC];
}
Run Code Online (Sandbox Code Playgroud)
小智 14
如果您的部署目标是iOS 8+,请尝试UIAlertController
.
这里有一个快速解决方法UIAlertView
:当文本字段或文本视图重新启动第一响应者时,延迟调用显示警报视图.
[self performSelector:@selector(showAlertView) withObject:nil afterDelay:0.6];
Run Code Online (Sandbox Code Playgroud)
我也注意到了 textField 键盘和alertViews 的一些奇怪行为......也许创建一个名为disableKeyboard 的布尔值并像这样使用它:
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
if (disableKeyBoard) {
disableKeyboard = NO;
return NO;
} else {
return YES;
}
}
- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex {
disableKeyboard = YES;
}
Run Code Online (Sandbox Code Playgroud)
这只是一种解决方法,并没有解决核心问题。要使此方法起作用,您需要在标头中设置alertView和textField委托方法。
归档时间: |
|
查看次数: |
11008 次 |
最近记录: |