有没有办法以编程方式启用或禁用Return键UIKeyboard
?我能找到的最接近的是enablesReturnKeyAutomatically
,但这只会告诉您是否完全禁用它。
有没有办法以编程方式启用或禁用Return键UIKeyboard
?我能找到的最接近的是enablesReturnKeyAutomatically
,但这只会告诉您是否完全禁用它。
Answers:
以下代码段可能会有所帮助:
textfield.enablesReturnKeyAutomatically = YES;
这可以在iPhone SDK的UITextInputTraits中公开获得。使用此选项,当文本字段中没有输入文本可用时,返回键将被禁用。
UITextField
enablesReturnKeyAutomatically
可以在Interface Builder中直接设置的属性,只需选择文本字段并打开“属性”检查器。如Tharindu所述,这将根据是否输入任何文本自动启用和禁用返回键。
当然,如果您需要在代码中更改此设置,仍然可以使用编程设置nameTextField.enablesReturnKeyAutomatically = true
。
编辑以解决下降投票:
否则,没有正式的方法来启用和禁用命令上的返回键。我建议不要尝试使用私有API来完成此任务。另外,您可以使用textFieldShouldReturn:
委托方法,并将条件/验证放在那里,并做出相应的响应。
您可以覆盖UITextField
的hasText
属性以实现此目的:
class CustomTextField : UITextField {
override public var hasText: Bool {
get {
return evaluateString(text)
}
}
}
在这里evaluateString(_ text: String?) -> Bool
检查所需的输入条件,例如字符数。
当然,这只能与enablesReturnKeyAutomatically = true
上的设置结合使用UITextField
。
我知道我的答案既不及时也不用Objective-C编写,但是鉴于我无法在其他任何地方找到答案,并且这个问题在其他线程中经常提及,因此我认为这是最好的解决方法发表它。
一个好主意是创建一个文件以从任何地方访问此类。这是代码:
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];
您可以在以下位置找到此类的完整文档: http : //ericasadun.com/iPhoneDocs/_u_i_keyboard_8h-source.html
您可以在这里找到更多信息: http : //cocoawithlove.com/2009/04/showing-message-over-iphone-keyboard.html
我对重复问题的回答,复制过来:
所有其他解决方案都不能回答问题。OP希望“灰显”键盘上的返回按钮,作为对用户的视觉信号。
这是我在iOS 13上运行的解决方案。对于其他iOS版本,您可能需要稍作修改。
首先,我扩展UITextFieldDelegate
。
func getKeyboard() -> UIView?
{
for window in UIApplication.shared.windows.reversed()
{
if window.debugDescription.contains("UIRemoteKeyboardWindow") {
if let inputView = window.subviews
.first? // UIInputSetContainerView
.subviews
.first // UIInputSetHostView
{
for view in inputView.subviews {
if view.debugDescription.contains("_UIKBCompatInputView"), let keyboard = view.subviews.first, keyboard.debugDescription.contains( "UIKeyboardAutomatic") {
return keyboard
}
}
}
}
}
return nil
}
然后,每当我需要禁用“返回”键时,我们都可以做(用delegate
您的委托对象的变量名代替):
if let keyboard = delegate.getKeyboard(){
keyboard.setValue(text == nil, forKey: "returnKeyEnabled")
}
这是一种已记录的API可用的技术,但是在禁用Enter键时它不提供视觉反馈。
- (void)setup {
// Or in init
self.textField.delegate = self;
}
// <UITextFieldDelegate>
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
// substitute your test here
return [textField.text rangeOfString:@"@"].location != NSNotFound;
}
这里的其他答案可以与
[textField addTarget:self
action:@selector(validateTextField:)
forControlEvents:UIControlEventEditingChanged];
在用户输入时提供动态的视觉反馈。