我有一个iPad应用,在整个过程中使用了成千上万的UITextFields和UITextViews。在这些元素中输入文本时,将使用iOS默认keyboard。但是,因为我的应用程序不提供dictation支持,所以每当用户尝试口述时,它就会崩溃。对这个主题的一些研究表明,在默认keyboard上禁用dictation功能是不可能的。
相反,我发现建议将keyboard的类型改为不提供dictation选项的类型。问题是,我的应用程序中有数以千计的UITextFields和UITextViews,所以手动进入并更改它们的键盘类型是不可行的。我的问题是:有没有办法更改应用程序中使用的默认keyboard?
发布于 2015-10-03 05:57:08
要做到这一点,一种方法是使用一个类别,并在初始化期间设置值。这需要大量使用,但应该是安全的。
请记住,这将完成您所请求的操作,因此所有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的所有现有实例。
https://stackoverflow.com/questions/32913225
复制相似问题