无法在UIScrollView上触摸UITextField

时间:2010-04-21 04:46:57

标签: iphone uiscrollview uitextfield textfield scrollview

我知道这已被谈了很多。我想我已经通过这个网站上的每一个问题,但仍然无法使这个工作。

我是新手,但我很清楚我的所有代码都在发生什么。我绝对没有很多经验,这是我的第一个iPhone应用程序。

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

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

我现在将遗漏我的代码,因为可能有一个解决方案,有人不需要我的代码。如果有人需要查看我的代码,我会提出来。我的应用程序正在3.1.3 SDK中编写。

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

3 个答案:

答案 0 :(得分:6)

以下是Xcode 4.3.3中对我有用的内容。

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

答案 1 :(得分:0)

听起来你正在使用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;

答案 2 :(得分:0)

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

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

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

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

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

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