41

我遇到了一个问题,即离开aUITextField或. 此外,我创建了一个大按钮作为视图的背景,因此如果用户在字段之外点击它就会被触发。我在常规视图控制器中使用相同的代码,它按预期工作。在模态视图控制器中它什么也不做。任何建议,将不胜感激。UITextViewUIModalPresentationFormSheet

- (BOOL)textFieldShouldReturn:(id)sender {  
 [titleTextField resignFirstResponder];
 return YES;
}

- (BOOL)textViewShouldReturn:(id)sender {  
 [synopsisTextView resignFirstResponder];
 return YES;
}

- (IBAction)textFieldDoneEditing:(id)sender {  
 [sender resignFirstResponder];
} 

- (IBAction)textViewDoneEditing:(id)sender {  
 [sender resignFirstResponder];
} 

- (IBAction)backgroundClick:(id)sender {  
 [titleTextField resignFirstResponder];
 [synopsisTextView resignFirstResponder];
}
4

7 回答 7

119

如下所示覆盖disablesAutomaticKeyboardDismissal返回 NO 解决了我的相同问题。你应该把这段代码放到你的视图控制器中,你可以从中启动键盘:

- (BOOL)disablesAutomaticKeyboardDismissal {
    return NO;
}

另外,如果您想获得详细解释,请查看此SO question。

于 2011-06-07T16:30:25.543 回答
51

对于那些有问题的人UINavigationController,我认为有一个比分类更好的解决方案UIViewController。我们应该改变UINavigationController询问它的行为topViewController(在我看来,这是所有ViewController容器应该处理的方式)。

@implementation UINavigationController (DelegateAutomaticDismissKeyboard)
- (BOOL)disablesAutomaticKeyboardDismissal {
    return [self.topViewController disablesAutomaticKeyboardDismissal];
}
于 2012-05-08T22:54:32.293 回答
3

如果您使用演示样式“表单”呈现模式视图,Apple 显然不会关闭键盘,认为他们不希望键盘在用户进行大量编辑的地方跳进跳出(即“形式”)。解决方法是改变演示风格或接受它。

于 2010-08-02T10:33:23.127 回答
1

如果您实现 UITextFieldDelegate 协议,则在进行文本验证时可能会无意中导致此行为。如果您的验证代码在文本无效时从 textFieldShouldEndEditing 返回 false,则该字段无法放弃其 firstResponder 状态,并且键盘将在下一个视图中保留在屏幕上。

UITextField 键盘上的更多细节不会消失。不完全是

于 2016-05-06T23:45:25.733 回答
0

我通过调整 UIModalPresentationPageSheet 的大小解决了这个问题。在这里查看我的答案。

于 2010-12-15T22:17:46.070 回答
0

disablesAutomaticKeyboardDismissal拒绝在 iOS 7 上为我工作。

但是......我设法通过简单地禁用屏幕上的 UITextFields 来解决这个问题。

我的解决方案在这里描述。

此解决方法甚至适用于 Modal UIViewControllers。

是的......这也让我感到惊讶!

于 2014-04-22T13:40:32.100 回答
0

我也面临同样的问题,也做了所有事情,但没有奏效,然后我开始思考并得到一些结果。

但是对于那些想要在文本字段单击然后打开弹出窗口时关闭键盘的人来说,这个答案。

所以你只需要调用文本字段委托

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
    if textField == self.myTxtFieldName{
        self.view.endEditing(true) // keyboard hide code
        // here you can call your model or pop up code and keyboard will dismiss and your pop up open 
        return false 
    } 
     return true
} 

抱歉,如果这对您不起作用,如果有其他答案,请编辑它谢谢

于 2021-09-16T06:30:38.087 回答