8

我知道这已经被谈论了很多。我想我已经解决了这个网站上的每一个问题,但仍然无法让它发挥作用。

我是开发新手,但我对我的所有代码的情况有很好的了解。不过,我绝对没有太多经验,这是我的第一个 iPhone 应用程序。

我正在制作一个由 UIScrollView 中的多个 UITextField 组成的数据输入字段。我暂时避免解释其他细节,因为这似乎是一个非常基本的问题。没有滚动视图,文本字段可以完美运行。我可以触摸文本字段,然后键盘或选择器视图会正确显示。当我将文本字段添加到滚动视图时,滚动视图可以工作,但是文本字段不会收到我的触摸。
这是关键:启用“用户交互”时,滚动视图有效,但未注册文本字段触摸。当“用户交互”被禁用时,滚动视图不起作用,但文本字段触摸已注册并且键盘/选择器弹出。

从其他帖子中,我看到人们创建子类并在单独的实现中覆盖触摸。我见过人们使用自定义内容视图(子视图?),我见过一些现在已经过时的解决方案,因为 API 在较新版本的 SDK 中发生了变化,我完全被卡住了。

我现在将省略我的代码,因为也许有人拥有不需要我的代码的解决方案。如果有人需要看我的代码,我会把它放上来。我的应用程序是用 3.1.3 SDK 编写的。

如果有人有任何可以提供帮助的信息,将不胜感激。

4

3 回答 3

9

这是对我有用的Xcode 4.3.3

在情节提要中,选择您的scrollview. 选择Attribute Inspector右侧。取消选中Delays Content Touches

于 2012-09-14T04:08:14.743 回答
0

您可能需要根据需要启用/禁用滚动视图和文本字段的用户交互。

如果可能,您最好为每个进程使用不同的触摸机制(滚动和文本字段输入)。

也许您可以检查触摸开始和结束之间的时间差,以便您可以检测拖动(滚动)和点击(文本输入)之间的差异。

话虽如此,如果您将触摸从文本字段传播到滚动视图,您应该没问题。我使用的一件事是:

[myObject addTarget:self action:@selector(itemTouchedUpInside:) forControlEvents:UIControlEventTouchUpInside];

它通过触摸的对象,以便您可以识别它并采取相应的行动。

于 2012-01-10T17:27:43.883 回答
0

听起来您正在使用 IB 来做很多 UI 布局。如果您采用编程方法,您可以设置以下应该工作的视图层次结构。

管理滚动视图和文本字段的视图控制器对象应该有一个UIScrollView对象和一个UIView对象(除了UITextField您需要的任何对象)。在视图控制器类的 loadView 方法中,分配和初始化UIView对象并将您的文本字段作为子视图添加到它。在方法结束时,分配并初始化UIScrollView对象,然后将其添加UIViewUIScrollView子视图中。

例如,如果您的UIScrollView对象称为 scrollView 并且您的UIView对象称为 mainView 视图控制器的 loadView 方法末尾的以下行将正确设置带有主视图的滚动视图及其上的文本字段:

scrollView = [[UIScrollView alloc] initWithFrame: [[UIScreen mainScreen] bounds] ];
scrollView.backgroundColor = [UIColor whiteColor];
scrollView.contentSize = mainView.frame.size;
[scrollView addSubview: mainView];
self.view = scrollView;
于 2010-07-22T19:55:37.607 回答