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

Sop*_*ert 68 xcode cocoa-touch objective-c ios

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

Tha*_*nka 77

可能是以下代码段帮助.

textfield.enablesReturnKeyAutomatically = YES;
Run Code Online (Sandbox Code Playgroud)

这在UITextInputTraits的iPhone SDK中公开可用.使用此选项时,如果文本字段中没有可用的输入文本,则将禁用返回键

  • 可能听起来很傻,但是当我来到这里时,我想要这个答案.就像我想很多人一样,我盲目地点击google中出现的第一个链接,完全跳过了这个问题并阅读了前几个答案 (3认同)
  • 在 Swift 中: textfield.enablesReturnKeyAutomatically = true (2认同)

Kyl*_*egg 27

UITextFieldenablesReturnKeyAutomatically属性可以直接在Interface Builder进行设置,只需选择文本字段,打开属性检查器.正如Tharindu所说,这将根据是否输入任何文本自动启用和禁用返回键.

在此输入图像描述

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

编辑以解决downvotes:

否则,没有正式的方法来启用和禁用命令返回键.我建议不要尝试使用私有API来实现这一目标.或者,您可以使用textFieldShouldReturn:委托方法并将条件/验证放在那里并做出相应的响应.


Ell*_*roo 23

如果您可以获得UIKeyboard对象本身(SDK中未公开的内容,请注意,如果您使用这些调用,Apple可能会不高兴),那么有一个方便的setReturnKeyEnabled:成员函数.

id keyboard = [self magicallyGetAUIKeyboardInstance];
[keyboard setReturnKeyEnabled: NO];
Run Code Online (Sandbox Code Playgroud)

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

实施magicallyGetAUIKeyboardInstance描述这里.

  • `enableReturnKeyAutomatically`不适用于数字键盘. (2认同)
  • 链接断开 (2认同)

小智 18

你可以覆盖UITextField's hasText属性来实现这个目的:

class CustomTextField : UITextField {
    override public var hasText: Bool {
        get {
            return evaluateString(text)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

evaluateString(_ text: String?) -> Bool对您的需要输入标准的检查,例如字符数.

当然,这只能与enablesReturnKeyAutomatically = true套装相结合UITextField.

我知道我的答案既不及时,也不是用Objective-C编写的,但鉴于我无法在其他任何地方找到答案而这个问题在其他主题中经常提到,我认为这里是最好的地方.发表它.


SEQ*_*eam 1

一个好主意是创建一个文件以从任何地方访问此类。这是代码:

UIKeyboard.h

#import <UIKit/UIKit.h> 

@interface UIApplication (KeyboardView)

    - (UIView *)keyboardView; 

@end
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

现在您可以从您自己的类中导入并访问此类:

#import "UIKeyboard.h"

    // Keyboard Instance Pointer.
    UIView *keyboardView = [[UIApplication sharedApplication] keyboardView];
Run Code Online (Sandbox Code Playgroud)

您可以在这里找到此类的完整文档: http ://ericasadun.com/iPhoneDocs/_u_i_keyboard_8h-source.html

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

  • App Store 拒绝概率:100% (13认同)