How to disable/enable the return key in a UITextField?

Solution 1:

Maybe the following code segment helps:

textfield.enablesReturnKeyAutomatically = YES;

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

Solution 2:

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.

Solution 3:

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.

Solution 4:

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