【问题标题】:How to set a default keyboard across an entire iOS app?如何在整个 iOS 应用程序中设置默认键盘?
【发布时间】:2015-10-02 18:06:54
【问题描述】:

我有一个iPad 应用程序,它使用了数千个UITextFieldsUITextViews。在这些元素中输入文本时,将使用 iOS 默认的 keyboard。但是,因为我的应用程序不提供dictation 支持,所以每当用户尝试指示时它就会崩溃。对该主题的一些研究表明,无法在默认 keyboard 上禁用 dictation 功能。

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

【问题讨论】:

  • 你的意思是自动文本吗?您可以通过键盘禁用自动建议
  • 听写不同于自动文本。自动文本会在您键入时提示单词,听写允许用户对着手机/ipad 说话并将他们的声音翻译成文本
  • 如果不想出现词典按钮,可以将键盘类型改为UIKeyboardTypeEmailAddress;
  • 请完整阅读我的帖子,这正是我想做的哈哈
  • 当您的应用不支持听写时,为什么要更改每个文本字段的键盘类型?

标签: ios ipad uitextfield uikit uitextview


【解决方案1】:

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

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

该类别将默认所有 UITextField 都显示数字键盘。

#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 实例替换为其新的子类。

【讨论】:

    猜你喜欢
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 2021-10-07
    • 1970-01-01
    • 2016-04-18
    相关资源
    最近更新 更多