无法触摸UIScrollView上的UITextField

我知道这已经被讨论了很多。 我想我已经通过这个网站的每一个问题,仍然无法得到这个工作。

我是新开发人员,但我对我的所有代码都有很好的理解。 我绝对没有很多经验,这是我的第一个iPhone应用程序。

我在UIScrollView中创建一个由多个UITextField组成的数据输入字段。 我现在要避免解释其他细节,因为它似乎是一个非常基本的问题。 如果没有滚动视图,textfields可以很好地工作。 我可以触摸文本框并正确显示键盘或选取器视图。 当我将文本字段添加到滚动视图时,滚动视图起作用,但是文本字段没有收到我的触摸。
以下是关键:当“用户交互”处于启用状态时,滚动视图有效,但文本框触摸未注册。 当“用户交互”被禁用时,滚动视图不起作用,但文本框触及ARE注册并弹出键盘/选择器。

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

现在我将忽略我的代码,因为也许有人在不需要我的代码的情况下提供解决方案。 如果有人需要看我的代码,我会放下。 我的应用程序正在编写在3.1.3 SDK中。

如果任何人有任何可以帮助的信息,将非常感激。


这是在Xcode 4.3.3为我工作的。

在故事板中,选择您的scrollview 。 选择右侧的Attribute Inspector 。 取消选中Delays Content Touches


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

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

例如,如果您的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;

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

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

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

话虽如此,如果你从文本字段向scrollview传播,你应该没问题。 我使用的一件事是:

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

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

链接地址: http://www.djcxy.com/p/45369.html

上一篇: Can't touch UITextField on UIScrollView

下一篇: REST: Best practice for partial update of subset of collection