如何禁用/启用UITextField中的返回键?

有没有办法以编程方式启用或禁用UIKeyboard上的返回键? 我能find的最接近的是enablesReturnKeyAutomatically ,但是只会告诉是否禁用它。

如果你可以获得UIKeyboard对象本身(SDK中没有公开的东西,请注意,如果你使用这些调用,Apple可能不会很开心),那么有一个方便的setReturnKeyEnabled:成员函数。

 id keyboard = [self magicallyGetAUIKeyboardInstance]; [keyboard setReturnKeyEnabled: NO]; 

(通过Erica Sadun的 2.2 iPhone框架的转储 )

这里描述了magicallyGetAUIKeyboardInstance的实现。

可能是以下代码段的帮助。

 textfield.enablesReturnKeyAutomatically = YES; 

这是在UITextInputTraits iPhone SDK中公开可用。 使用这个,当文本字段中没有可用的input文本时,返回键将被禁用

UITextFieldenablesReturnKeyAutomatically属性可以在Interface Builder中正确设置,只需select文本字段并打开属性检查器即可。 正如Tharindu所说,这将根据是否input任何文本自动启用和禁用返回键。

在这里输入图像描述

当然,如果你需要在代码中进行更改,你仍然可以使用nameTextField.enablesReturnKeyAutomatically = true编程方式进行设置。

编辑解决downvotes:

否则,没有官方的方式来启用和禁用返回键的命令。 我build议不要尝试使用私有API来实现这一点。 或者,您可以使用textFieldShouldReturn:委托方法,并将您的条件/validation在那里,并作出相应的响应。

一个好主意是从任何地方创build一个文件来访问这个类。 这里是代码:

UIKeyboard.h

 #import <UIKit/UIKit.h> @interface UIApplication (KeyboardView) - (UIView *)keyboardView; @end 

UIKeyboard.m

 #import "UIKeyboard.h" @implementation UIApplication (KeyboardView) - (UIView *)keyboardView { NSArray *windows = [self windows]; for (UIWindow *window in [windows reverseObjectEnumerator]) { for (UIView *view in [window subviews]) { if (!strcmp(object_getClassName(view), "UIKeyboard")) { return view; } } } return nil; } @end 

现在你可以从你自己的类中导入和访问这个类:

 #import "UIKeyboard.h" // Keyboard Instance Pointer. UIView *keyboardView = [[UIApplication sharedApplication] keyboardView]; 

你可以在这里find这个类的完整文档: http : //ericasadun.com/iPhoneDocs/_u_i_keyboard_8h-source.html

更多信息,你可以在这里find: http : //cocoawithlove.com/2009/04/showing-message-over-iphone-keyboard.html

你可以覆盖UITextFieldhasText属性来实现这一点:

 class CustomTextField : UITextField { override public var hasText: Bool { get { return evaluateString(text) } } } 

where evaluateString(_ text: String?) -> Bool检查您所需的input条件,例如字符数。

当然,这只能与UITextField上的enablesReturnKeyAutomatically = true一起使用。

我知道我的答案既不是及时的,也不是用Objective-C编写的,但是由于我没有在其他地方find答案,而且这个问题在其他线程中经常提到,所以我认为这里是最好的地方发表它。