如何禁用键盘而不将其隐藏在iOS中?
我有一个包含各种元素的屏幕,包括UITextField,我想在屏幕上显示coach标记(我正在使用库)。但是,我需要在显示coach标记时冻结与元素的交互(例如,用户不能在文本字段中键入内容) 我的问题是键盘(始终显示在此屏幕中):如果我只是将文本字段的isEnabled属性设置为false,或将isUserInteractionEnabled=false,则该字段将退出first responder,键盘将消失,这对于此屏幕来说是不自然的。但是,如果我在range:delegate方法中使用textField:shouldChangeCharacters并返回false,键盘将保持可见,但已启用。因此,当coach标记出现时,用户可以点击键盘。虽然这对文本字段没有影响,但它仍然很奇怪和恼人 那么,我如何暂时保持键盘,但将其禁用(最好是在coach标记模糊视图后面)?我看到了,但这并不能提供一个我认为苹果会接受的解决方案 谢谢如何禁用键盘而不将其隐藏在iOS中?,ios,swift,Ios,Swift,我有一个包含各种元素的屏幕,包括UITextField,我想在屏幕上显示coach标记(我正在使用库)。但是,我需要在显示coach标记时冻结与元素的交互(例如,用户不能在文本字段中键入内容) 我的问题是键盘(始终显示在此屏幕中):如果我只是将文本字段的isEnabled属性设置为false,或将isUserInteractionEnabled=false,则该字段将退出first responder,键盘将消失,这对于此屏幕来说是不自然的。但是,如果我在range:delegate方法中使用t
Yariv.当键盘可见时,您可以动态添加
ui按钮。您可以添加keyboardidshow
和keyboardidhide
观察者,以了解键盘何时启动并可见
您可能会遇到键盘在屏幕上位于最顶端的问题,但您可以通过将新添加的ui按钮设置为当前视图/窗口的最顶端来解决此问题
不要忘记将ui按钮的userInteractionEnabled
设置为false
通过@MikeAlter对您的问题进行评论将是最好的(干净的)解决方案。但是,这也意味着你没有任何控制来导航/交互屏幕上的其他控件
编辑
显示时,键盘在屏幕上有特定区域。我的解决方案建议您可以在视图中添加一个与键盘完全相同的矩形/框架的ui按钮
。覆盖整个键盘的视图/按钮。因此,您的键盘不会进行任何用户交互
下面的代码可以获得键盘的大小。您可以在完全相同的位置添加大小相同的ui按钮
,这将使键盘处于非活动状态,因为用户交互将由按钮本身负责
- (void)keyboardDidShow:(NSNotification *)notification {
CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
int height = MIN(keyboardSize.height,keyboardSize.width);
int width = MAX(keyboardSize.height,keyboardSize.width);
... Add UIButton here with the CGRect of keyboard
}
您需要注册到UIKeyboardDidShowNotification
才能使上述功能正常工作,如下所示:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardDidShow:)
name:UIKeyboardDidShowNotification
object:nil];
如果要使“coach marks blur”视图后面的键盘模糊,请将“coach marks blur”视图添加到最后一个窗口:
UIApplication.shared.windows.last?.addSubview(coachMarksBlurView)
UIApplication.shared.keyWindow?.bringSubview(toFront: coachMarksBlurView)
如果要阻止键盘,可以使用以下两个功能:
func addBlockView(){
view.addSubview(viewBlock)
viewBlock.frame = CGRect.init(x: 0, y: 0, w:
UIScreen.main.bounds.size.width, h:
UIScreen.main.bounds.size.height)
viewBlock.backgroundColor = UIColor.clear
UIApplication.shared.windows.last?.addSubview(viewBlock)
UIApplication.shared.keyWindow?.bringSubview(toFront: viewBlock)
}
func removeBlockView(){
viewBlock.removeFromSuperview()
}
Try textField.resignFirstResponder=true它将删除键盘Try self.view.endEditing(true)您只需在显示帮助内容时禁用主窗口(AppDelegate的窗口对象)的用户交互,并在完成Jignesh时启用-整个要点不是隐藏键盘。拉杰什库马尔:这也取消了键盘,还有一个额外的缺点,即文本字段失去焦点,当coach标记被取消时,用户必须重新点击它。迈克:这似乎是最好、最清楚的答案。然而,不幸的是,这似乎也调用了resignFirstResponder,而且,甚至最糟糕的是,coach标记自己没有响应,用户也不能将其驳回。我不确定我是否理解您的意思-您的意思是添加一个将成为FirstResponder本身的UIButton吗?这对我有什么帮助?当我调用userInteractionEnabled=false时,键盘消失也会有同样的问题,不是吗?UIButton能否成为第一响应者(显示键盘)?也许我不明白你的解决方案,如果你能更具体一点,我将不胜感激。谢谢