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 键盘扩展中检测到通过在 iMessage 中点击“发送”等操作清除了文本字段?
当键盘从自己的文本字段切换到另一个文本字段时,搜索栏右键“取消”被禁用