iOS通过代码将默认键盘从ABC模式切换到123模式?

Posted

技术标签:

【中文标题】iOS通过代码将默认键盘从ABC模式切换到123模式?【英文标题】:iOS toggle default keyboard from ABC mode to 123 mode via code? 【发布时间】:2014-08-05 23:43:39 【问题描述】:

我可以通过以下方式查看如何设置键盘的整体类型:

self.myTextView.keyboardType = UIKeyboardTypeDefault;

如何通过代码将默认键盘模式从 ABC 切换到 123 并再次返回?基本上在用户点击@字符的那一刻(@符号在他们处于 123 模式时可用)我想将他们的键盘切换回 ABC 模式。

有什么想法吗?

【问题讨论】:

【参考方案1】:

您可以通过使用 UITextViewDelegate 来完成此操作。它允许您在 UITextView 中按下按键时拦截它们。这将允许您在用户按下某个键时切换键盘。为了恢复 UIKeyboardTypeDefault 键盘的默认状态,您需要将键盘类型更改为另一种,然后再恢复为默认状态。

在您的 ViewController.h 文件中,使其实现 UITextViewDelegate 协议:

@interface ViewController : UIViewController <UITextViewDelegate>

在 ViewController.m 的 ViewController 的 viewDidLoad 方法中,将 textField 的委托设置为视图控制器:

- (void)viewDidLoad

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    self.myTextView.delegate = self;

最后,我们需要在输入时捕获键并适当地更改键盘。我们在 shouldChangeCharactersInRange: 方法中执行此操作。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

    if( [@"@" isEqualToString:text] )
    
        NSLog( @"Toggling keyboard type");
        textView.inputView = nil;
        [textView resignFirstResponder];
        [textView setKeyboardType:UIKeyboardTypeEmailAddress];
        [textView becomeFirstResponder];
        [textView reloadInputViews];

        textView.inputView = nil;
        [textView resignFirstResponder];
        [textView setKeyboardType:UIKeyboardTypeDefault];
        [textView becomeFirstResponder];
        [textView reloadInputViews];

    
    return YES;

所以我最初很困惑,并认为您实际上想更改键盘类型。现在我正在阅读您的评论,我意识到您实际上是想将键盘重置为显示字母的默认状态,而不是数字和特殊字符。上面的代码现在可以做到这一点。

【讨论】:

使用这种方法我无法让键盘切换回 ABC。当我单步执行代码时,我的 textView 的类型始终是 UIKeyboardTypeDefault,这就是我想要的。我想在默认键盘中切换“模式”,以将用户从数字和标点符号选项(即“@”所在的位置)切换到字母所在的 ABC。我将更新帖子以显示屏幕截图。有什么想法吗? 这似乎确实可以工作,但不会导致键盘切换模式。你测试过这种方法吗?我能想到的你在这里和我的代码之间的唯一区别是我使用的是 textView 而不是 textField 但这些方法仍然应该适用...... 我做了,我让它在模拟器中运行,它工作正常。每次按@ 键时,我都会恢复到默认状态下的默认键盘(使用字母键)。如果你在shouldChangeCharactersInRange: 方法中设置了断点,你是在打断点吗?如果不是,则代表未正确分配。如果击中它,你能看到键盘类型在第一次调用setKeyboardType 之后和第二次之前发生了变化吗? 我只是在模拟器而不是在设备上进行了测试,它也没有为我切换。当我运行调试会话并通过添加以下行的代码单步执行 NSLog(@"Keyboard type = %ld", textView.keyboardType); 时,我首先看到它是“键盘类型 = 0”,然后切换到“键盘类型 = 7”(UIKeyboardTypeEmailAddress),然后切换回“键盘类型 = 0" 但这些都不会以图形方式更改用户的键盘状态。可能出了什么问题? 好的,我已经更新了它以与 UITextView 一起使用。似乎 UITextView 需要稍微不同的代码来更新键盘类型。让我知道它是否对您有用,因为我在这里的演示项目中对其进行了测试,并且我相信它可以按照您的需要工作。如果它确实有效,请接受答案,以便其他人知道这是如何做到的。谢谢!

以上是关于iOS通过代码将默认键盘从ABC模式切换到123模式?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7 键盘主题切换

iOS BLE 模块开发总结

如何从 iOS 键盘扩展中检测到通过在 iMessage 中点击“发送”等操作清除了文本字段?

当键盘从自己的文本字段切换到另一个文本字段时,搜索栏右键“取消”被禁用

当 iOS 键盘处于活动状态时,CSS 方向会自动切换到横向

VIM使用技巧14