我有一个iPad
个应用,其中包含数千个UITextFields
和UITextViews
。在将文本输入这些元素时,将使用iOS默认值keyboard
。但是,由于我的应用程序不提供dictation
支持,因此每当用户尝试发出命令时它都会崩溃。对该主题的一些研究表明,无法禁用默认dictation
上的keyboard
功能。
相反,我发现建议将keyboard
的类型更改为不提供dictation
选项的类型。问题是我的应用程序中有数千个UITextFields
和UITextViews
,因此手动进入并更改每个键盘的键盘类型是不可行的。我的问题是:有没有办法更改应用中使用的默认keyboard
?
答案 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的所有现有实例。