Есть ли способ программно включить или отключить Return Key на UIKeyboard
? Самое близкое, что я мог найти, это enablesReturnKeyAutomatically
, но это только покажет, отключить ли его вообще.
Как отключить/включить ключ возврата в UITextField?
Ответ 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, это автоматически включит и отключит ключ возврата в зависимости от того, был ли введен какой-либо текст.
Конечно, если вам нужно изменить это в коде, вы все равно можете установить его программным путем с помощью 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! чтобы получить эту строку и чем обратный ушел!