如何禁用/启用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文本时,返回键将被禁用
UITextField
的enablesReturnKeyAutomatically
属性可以在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
你可以覆盖UITextField
的hasText
属性来实现这一点:
class CustomTextField : UITextField { override public var hasText: Bool { get { return evaluateString(text) } } }
where evaluateString(_ text: String?) -> Bool
检查您所需的input条件,例如字符数。
当然,这只能与UITextField
上的enablesReturnKeyAutomatically = true
一起使用。
我知道我的答案既不是及时的,也不是用Objective-C编写的,但是由于我没有在其他地方find答案,而且这个问题在其他线程中经常提到,所以我认为这里是最好的地方发表它。