我尝试以编程方式popViewcontroller 通过这样做
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
[[self navigationController] popViewControllerAnimated:YES];
}
问题是我在这个VC中有textFields。如果textField处于活动状态并且键盘正在显示,并且我显示AlertView并使用命令来重新键入键盘([[self view] endEditing:YES] or [textField resignFirstResponder]
)。然后调用命令popViewControllerAnimated:YES。在出现父VC之后,当前的VC被解雇但是很短暂。将会有一个键盘显示1秒钟,然后消失。
这种行为非常烦人。反正有没有解决这个问题?我注意到使用[[self navigationController] popViewControllerAnimated:NO]
键盘不会出现。但我更喜欢在我的应用中使用动画。
请帮忙。
提前致谢
答案 0 :(得分:5)
我解决了这个问题,我[[self navigationController] popViewControllerAnimated:YES];被叫时被推迟。
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 100 * NSEC_PER_MSEC), dispatch_get_main_queue(), ^{
[[self navigationController] popViewControllerAnimated:YES];
});
答案 1 :(得分:0)
答案 2 :(得分:0)
您也可以尝试以下代码:
#pragma mark - UIAlertView Delegate
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
[self performSelector:@selector(popViewController) withObject:nil afterDelay:0.1];
}
- (void)popViewController {
[self.navigationController popViewControllerAnimated:YES];
}
答案 3 :(得分:0)
尝试这个我认为它可以帮助你
- (void)viewWillAppear:(BOOL)animated
{
[textField resignFirstResponder];
}
答案 4 :(得分:0)
我也遇到了这个问题,我发现延迟解决方案根本不起作用。 alertView
将记住键盘的状态,因此当alertView被解除时,它将恢复键盘。所以问题就出现了:弹出viewController后,键盘出现了大约1秒钟。
这是我的解决方案: 我们只需要在弹出viewcontroller之前确保隐藏键盘的状态。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
@property (nonatomic) BOOL keyboardDidShow;
- (void)keyboardDidHide:(NSNotification *)notification {
self.keyboardDidShow = NO;
if (self.needDoBack) {
self.needDoBack = NO;
[self showBackAlertView];
}
}
- (void)keyboardDidShow:(NSNotification *)notification {
self.keyboardDidShow = YES;
}
- (void)back {
if (self.keyboardDidShow) {
self.needDoBack = YES;
[self.view endEditing:YES];
} else {
[self showBackAlertView];
}
}