Подтвердить что ты не робот

Как отключить/включить ключ возврата в UITextField?

Есть ли способ программно включить или отключить Return Key на UIKeyboard? Самое близкое, что я мог найти, это enablesReturnKeyAutomatically, но это только покажет, отключить ли его вообще.

4b9b3361

Ответ 1

Если вы можете получить сам объект UIKeyboard (что-то, что не отображается в SDK, заметьте, поэтому Apple может не понравиться, если вы используете эти вызовы), то есть удобная функция setReturnKeyEnabled: member.

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

(через Erica Sadun dump из фонов iPhone 2.2)

Реализация magicallyGetAUIKeyboardInstance описана здесь.

Ответ 2

Может понадобиться следующий сегмент кода.

textfield.enablesReturnKeyAutomatically = YES;

Это общедоступно в iPhone SDK в UITextInputTraits. Используя это, клавиша возврата будет отключена, если в текстовом поле нет текста ввода

Ответ 3

UITextField enablesReturnKeyAutomatically свойство можно установить прямо в Interface Builder, просто выберите текстовое поле и откройте инспектор атрибутов. Как заявил Tharindu, это автоматически включит и отключит ключ возврата в зависимости от того, был ли введен какой-либо текст.

enter image description here

Конечно, если вам нужно изменить это в коде, вы все равно можете установить его программным путем с помощью nameTextField.enablesReturnKeyAutomatically = true.

РЕДАКТИРОВАТЬ, чтобы обратиться к downvotes:

В противном случае нет официального способа включения и отключения ключа возврата в команде. Я бы рекомендовал не пытаться использовать частные API для этого. Кроме того, вы можете использовать метод делегирования textFieldShouldReturn: и разместить там условное/валидационное подтверждение и соответствующим образом ответить.

Ответ 4

Вы можете переопределить атрибут UITextField hasText, чтобы достичь этого:

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

Где evaluateString(_ text: String?) -> Bool проверяет ваши требуемые критерии ввода, например, количество символов.

Конечно, это работает только в сочетании с enablesReturnKeyAutomatically = true, установленным на UITextField.

Я знаю, что мой ответ ни своевременен, ни написан в Objective-C, но, учитывая, что я не смог найти ответ нигде, и этот вопрос регулярно упоминается в других потоках, я думаю, что здесь есть лучшее место, чтобы опубликовать его.

Ответ 5

Одна хорошая идея - создать один файл для доступа к этому классу из любого места. Вот код:

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

Ответ 6

Вот метод, который доступен из документированного API, но он не обеспечивает визуальную обратную связь, когда клавиша ввода отключена.

- (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];

обеспечить динамическую визуальную обратную связь по мере ввода пользователем.

Ответ 7

Попробуйте использовать UITextField! чтобы получить эту строку и чем обратный ушел!