0

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

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,键盘按预期显示。如果我们单击 UITextField 之外,hideKeyboard则会调用该方法并按预期关闭键盘,但如果您尝试再次单击 UITextField,则不会再次显示键盘。

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

4

3 回答 3

1

每次需要用户反馈时,它都是一个非常普遍的问题。如果苹果在即将发布的框架版本中包含这些日常功能,那将非常有帮助。

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

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

但是我发现的所有提议的解决方案都倾向于 DIY,并且必须为每个需要它的视图控制器实现。

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

于 2013-10-10T11:22:47.113 回答
0

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

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

如果您想访问 UIView 和 UIScrollView 上的触摸事件,请尝试这样做。

于 2013-10-10T04:40:27.507 回答
0

尝试这个..

- (void) hideKeyboard 
{
    //Hide keyBoard
    [self.view endEditing:YES];
    [self.scrollView bringSubViewToFront:YourTextField];
}
于 2013-10-09T19:45:50.333 回答