2015-10-02 3 views
0

У меня есть приложение iPad, которое использует тысячи UITextFields и UITextViews на всем протяжении. Когда текст вводится в эти элементы, используется значение iOS по умолчанию keyboard. Однако, поскольку мое приложение не поддерживает dictation, оно срабатывает, когда пользователь пытается диктовать. Некоторое исследование предмета показало, что невозможно отключить функцию dictation по умолчанию keyboard.Как установить клавиатуру по умолчанию для всего приложения iOS?

Вместо этого я обнаружил, что рекомендуется использовать тип keyboard, который не предлагает опцию dictation. Проблема в том, что у меня есть тысячи UITextFields и UITextViews во всем моем приложении, поэтому ручное вхождение и изменение типа клавиатуры каждого из них неосуществимо. Мой вопрос заключается в следующем: существует ли способ изменить значение по умолчанию keyboard, используемое в приложении?

+0

Вы имеете в виду автотекст? Вы можете отключить автоматические подсказки по клавиатуре –

+0

Dictation отличается от автоматического текста. Автоматический текст предлагает слова по мере их ввода, диктовка позволяет пользователю говорить в свой телефон/ipad и переводит их голос в текст. –

+0

Если вы не хотите, чтобы кнопка dication появлялась, вы можете изменить тип клавиатуры на UIKeyboardTypeEmailAddress; –

ответ

0

Один из способов сделать это - использовать категорию и установить значение во время init. Для этого требуется swizzling, но должно быть безопасным.

Имейте в виду, что это сделает то, что вы запрашиваете, поэтому ВСЕ UITextFields теперь будут представлены с использованием определенного типа клавиатуры (даже если вы сами не создали экземпляр текстового поля).

Эта категория будет по умолчанию всеми UITextFields для отображения цифровой клавиатуры.

#import "UITextField+KeyboardType.h" 
#import <objc/runtime.h> 

@implementation UITextField (KeyboardType) 

+(void)initialize { 

    Method originalMethod = class_getInstanceMethod([self class], @selector(init)); 
    Method swizzledMethod = class_getInstanceMethod([self class], @selector(init_swizzled)); 
    method_exchangeImplementations(originalMethod, swizzledMethod); 
} 

- (instancetype)init_swizzled { 
    self = [self init_swizzled]; 
    if (self) { 
     self.keyboardType = UIKeyboardTypeNumberPad; 
    } 
    return self; 
} 

@end 

Я рекомендовал бы вам вместо этого создать подклассы UITextField/UITextView и заменить все существующие экземпляры UITextField/UITextView с их новыми подклассов.

Смежные вопросы