How to disable/enable the return key in a UITextFi

2019-01-04 00:16发布

Is there a way to programmatically enable or disable the Return Key on the UIKeyboard? The closest I could find is enablesReturnKeyAutomatically, but that only will tell whether to disable it at all.

6条回答
Anthone
2楼-- · 2019-01-04 00:37

One good idea is to create one file to access this class from anywhere. Here is the code:

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

Now you can import and access this class from your own class:

#import "UIKeyboard.h"

    // Keyboard Instance Pointer.
    UIView *keyboardView = [[UIApplication sharedApplication] keyboardView];

A full documentation of this class you can find here: http://ericasadun.com/iPhoneDocs/_u_i_keyboard_8h-source.html

More information you can find here: http://cocoawithlove.com/2009/04/showing-message-over-iphone-keyboard.html

查看更多
迷人小祖宗
3楼-- · 2019-01-04 00:40

If you can get the UIKeyboard object itself (something not exposed in the SDK, mind you, so Apple may not be happy if you use these calls), then there's a convenient setReturnKeyEnabled: member function.

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

(via Erica Sadun's dump of the 2.2 iPhone frameworks)

The implementation of magicallyGetAUIKeyboardInstance is described here.

查看更多
甜甜的少女心
4楼-- · 2019-01-04 00:40

May be following code segment helps.

textfield.enablesReturnKeyAutomatically = YES;

This is publically available in iPhone SDK in UITextInputTraits. Using this, return key will be disabled when no input text is available within text field

查看更多
Explosion°爆炸
5楼-- · 2019-01-04 00:43

UITextField's enablesReturnKeyAutomatically property can be set right in Interface Builder, just select the textfield and open the Attributes inspector. As Tharindu stated, this will automatically enable and disable the return key depending on whether any text has been entered.

enter image description here

Of course, if you need to change this in code you can still set it programmatically using nameTextField.enablesReturnKeyAutomatically = true.

EDIT to address the downvotes:

Otherwise, there is no official way to enable and disable the return key on command. I would recommend against trying to use private APIs to accomplish this. Alternatively, you can use the textFieldShouldReturn: delegate method and put your conditional/validation there and respond accordingly.

查看更多
何必那么认真
6楼-- · 2019-01-04 00:43

Here is a technique that is available from the documented API, but it does not provide visual feedback when the enter key is disabled.

- (void)setup {
    // Or in init
    self.textField.delegate = self;
}

// <UITextFieldDelegate>
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    // substitute your test here
    return [textField.text rangeOfString:@"@"].location != NSNotFound;
}

Other answers here can be used with

[textField addTarget:self
              action:@selector(validateTextField:)
    forControlEvents:UIControlEventEditingChanged];

to provide dynamic visual feedback as the user types.

查看更多
萌系小妹纸
7楼-- · 2019-01-04 00:53

You can override UITextField's hasText attribute to achieve this:

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

Where evaluateString(_ text: String?) -> Bool checks against your needed input criteria, for example character count.

Of course this does only work in combination with enablesReturnKeyAutomatically = true set on the UITextField.

I am aware that my answer is neither timely nor written in Objective-C, but given that I have not been able to find an answer anywhere else and this question being routinely referred to in other threads, I think that here is the best place to post it.

查看更多
登录 后发表回答