繁体   English   中英

当UITextField位于UIScrollView内时,使用“敲击手势”关闭键盘的问题。

[英]Issues with dismiss keyboard using Tap Gesture when UITextField is inside UIScrollView.

我设计的应用程序具有以下层次结构:

UIViewController
  UIView
    UIScrollView
      UITextField

在ViewDidLoad上,我做了:

...
tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)];
    tapGesture.cancelsTouchesInView = NO;
    [self.scrollView addGestureRecognizer:tapGesture];
...

在hideKeyboard上,我执行了以下操作:

- (void) hideKeyboard {
    //Hide keyBoard
    [self.view endEditing:YES];
}

乍一看,它可以完美运行,但不幸的是存在问题。 当应用程序运行时,我们可以单击UITextField,按预期显示键盘。 如果我们在U​​ITextField旁边单击, hideKeyboard调用hideKeyboard方法的方法, hideKeyboard预期方式关闭键盘,但是如果尝试再次单击UITextField,则不会再次显示键盘。

我做错了什么? 有人知道吗

它是每次需要用户反馈时都要处理的非常普遍的问题。 如果Apple在即将到来的框架版本中包含此类日常功能,将非常有帮助。

对于如何在编辑过程中将UITextField和UITextView移出键盘的方式,有一百一十种建议的解决方案-通常归结为观察

  1. UIKeyboardWillShowNotification和UIKeyboardWillHideNotification,或
  2. 实现UITextFieldDelegate委托方法,并调整超级视图的框架,或者
  3. 使用UITableView的scrollToRowAtIndexPath:atScrollPosition:animated:

但是我发现的所有建议的解决方案往往都是完全DIY的,必须为每个需要它的视图控制器实现。

解决方案由Michael Tyson提供... 用于将文本字段移出键盘的嵌入式通用解决方案您可以在GitHub项目页面上获取源文件,其中包括一个示例项目

尝试这个..

- (void) hideKeyboard 
{
    //Hide keyBoard
    [self.view endEditing:YES];
    [self.scrollView bringSubViewToFront:YourTextField];
}

我曾经想检测滚动视图上的触摸,类似于UIView上的触摸。

为了访问滚动视图上的触摸,如触摸开始和触摸结束,以及其他此类方法,我将UIScrollView子类化,并且能够访问scrollview上的所有触摸事件。

如果要访问UIView和UIScrollView上的触摸事件,请尝试执行此操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM