如何在整个iOS应用程序中设置默认键盘?

时间:2015-10-02 18:06:55

标签: ios ipad uitextfield uikit uitextview

我有一个iPad个应用,其中包含数千个UITextFieldsUITextViews。在将文本输入这些元素时,将使用iOS默认值keyboard。但是,由于我的应用程序不提供dictation支持,因此每当用户尝试发出命令时它都会崩溃。对该主题的一些研究表明,无法禁用默认dictation上的keyboard功能。

相反,我发现建议将keyboard的类型更改为不提供dictation选项的类型。问题是我的应用程序中有数千个UITextFieldsUITextViews,因此手动进入并更改每个键盘的键盘类型是不可行的。我的问题是:有没有办法更改应用中使用的默认keyboard

1 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是使用类别并在init期间设置值。这需要调配,但应该是安全的。

请记住,这将执行您的请求,因此所有UITextField现在将使用定义的键盘类型(即使您没有自己实例化文本字段)。

此类别将默认所有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的所有现有实例。