我有一个问题,每当我进入一个视图控制器 - 在下面的屏幕截图中的“MessageListViewController”,键盘将自动弹出。为什么当viewController被按下时键盘自动弹出
事情是我在这个MessageListViewController中使用了一个UITextView用于文本输入,当我从navigationController栈弹出这个视图控制器时,如果我把键盘打开,那么下一次当它被再次按下时,这个键盘将会自动弹出。
如果我在弹出此视图控制器之前使文本视图resignFirstResponder,那么下次输入它会很好。但resignFirstResponder手动会使键盘解散与一个丑陋的动画(手动关闭键盘它会使键盘始终垂直屏幕下垂,但视图控制器弹出交易是水平的,所以它会看起来非常有线)
我试过构建一个简单的示例来测试键盘解散行为 - 有两个视图控制器,一个是navigationController的rootViewController,它会将另一个视图拖放到viewController堆栈中,因此,如果突出显示文本,推送的视图控制器将包含UITextView然后回到根视图控制器,动画工作得很好,键盘也不会自动弹出。所以我只是不知道为什么在我的项目中,如果我刚离开页面而没有手动关闭键盘,则此键盘总是意外出现。
顺便说一句,下面的调用堆栈发生在viewWillAppear和viewDidAppear之间。它看起来像是由iOS触发的,以恢复UITextView的最后一个状态。
- (UIView*)findFirstResponder {
if (self.isFirstResponder) {
return self;
}
for (UIView* subview in self.subviews) {
UIView* ret = [subview findFirstResponder];
if (ret) {
return ret;
}
}
return nil;
}
NSLog(@"%@", [[[UIApplication sharedApplication] keyWindow] findFirstResponder]);
我也试图跟踪与关键窗口的第一个响应时键盘触发此调用堆栈将显示通知,并且出放仅仅是“无”。
在viewWillAppear方法中使用[self.view endEditing:YES]并查看它是否有效。 –
尝试在从视图中出来时辞去键盘。 - (无效)ViewwillDisappear; – Romance
谢谢Puneet,我试图把它放在很多地方,但它仍然不起作用。 – Pei