以编程方式灰显返回键

时间:2015-05-24 15:57:09

标签: ios ios8 uitextfield uikeyboard ios8.3

如果(并且仅当用户)输入有效的电子邮件地址,我希望启用UITextField键盘的返回键。

我尝试使用私有方法setReturnKeyEnabled的{​​{3}}。不幸的是,这种方法似乎不再存在:

  

没有已知的选择器实例方法' setReturnKeyEnabled:'

如何以编程方式启用和禁用键盘的返回键?

3 个答案:

答案 0 :(得分:1)

所有其他解决方案均未回答问题。 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")
}

答案 1 :(得分:0)

  1. 在UITextField上设置委托
  2. 对于您的委托实例(您刚刚设置的符合UITextFieldDelegate的实例),请执行:- (BOOL)textFieldShouldReturn:(UITextField *)textField
  3. 代理中还有其他回调,例如您可能感兴趣的textField:shouldChangeCharactersInRange:replacementString:,如果您尝试保持textField始终"正确"并且不允许用户在文本字段与您首选的格式/验证错误之后继续键入。绝对值得一看UITextFieldDelegate的文档,以获取所有可能的回调。

答案 2 :(得分:-1)

您实际上启用禁用返回键。相反,如果用户按下返回键,则调用委托方法-textFieldShouldReturn:。如果您想在这种情况下隐藏键盘,则必须在委托方法中的文本字段上调用-resignFirstResponder

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITextFieldDelegate_Protocol/index.html