SDK安全地隐藏iPad键盘,当TextView处于焦点状态时。

4

我有一些iPad应用程序,用户可以使用触摸屏或蓝牙键盘进行导航。

我有一些隐藏的textView,它是焦点(第一个响应者),我在这里检测从键盘输入的内容。

但是,当我断开键盘时,我遇到了一个问题,虚拟键盘出现了。

我能否检查蓝牙键盘是否连接,并在viewDidLoad或其他地方设置或取消第一个响应者?

或者

我有通知:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillAppear:) name:UIKeyboardWillShowNotification object:nil];

当 keyboardWillAppear 被触发时,我能否以某种方式隐藏键盘? 我尝试了 [textView resignFirstResponder],但没有成功 :|

3个回答

5
你可以使用 performSelector: 来实现这个功能。
- (void)hideKeyboard:(UITextView *)textView {
    [textView resignFirstResponder];
}

- (void)keyboardWillAppear:(NSNotification *)notification { 
    UITextView *textView = (UITextView *)[self.view viewWithTag:TEXTVIEW_TAG];

    [self performSelector:@selector(hideKeyboard:) withObject:textView];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillAppear:) name:UIKeyboardWillShowNotification object:nil];
}

我也遇到了同样的问题。还有一个更正,应该是TextView,而不是TextField。 - dormitkon

5
您可以将inputView设置为透明视图:
UIView *emptyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
emptyView.backgroundColor = [UIColor clearColor];
textView.inputView = emptyView;

理论上,这将把屏幕键盘设置为空视图,因此它不会显示。如果它不接受没有框架的视图,则尝试增加宽度和高度为1。这不会影响外部键盘;它只是不会在设备上显示。


0

你需要将textView的第一响应者辞职安排到一个调度队列中,因为成为第一响应者的过程可能尚未完成。使用XCode的调度模板可以轻松解决:

int64_t delayInSeconds = 0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    [self.textView resignFirstResponder];
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接