我知道这已被谈了很多。我想我已经通过这个网站上的每一个问题,但仍然无法使这个工作。
我是新手,但我很清楚我的所有代码都在发生什么。我绝对没有很多经验,这是我的第一个iPhone应用程序。
我正在创建一个数据输入字段,该字段由UIScrollView中的多个UITextField组成。我现在将避免解释其他细节,因为它似乎是一个非常基本的问题。没有滚动视图,文本字段可以完美地工作。我可以触摸文本字段,键盘或选择器视图会正确显示。当我将文本字段添加到滚动视图时,滚动视图可以工作,但文本字段不会接收我的触摸。
这是关键:当“用户交互”启用时,滚动视图可以正常工作,但文本字段触摸未注册。当“用户交互”被禁用时,滚动视图不起作用,但文本字段触摸已注册并且弹出键盘/选择器。
在其他帖子中,我看到人们在单独的实现中创建子类并覆盖触摸。我见过人们使用自定义内容视图(子视图?),我已经看到一些现在已经过时的解决方案,因为在较新版本的SDK中API已经发生了变化,我只是完全卡住了。
我现在将遗漏我的代码,因为可能有一个解决方案,有人不需要我的代码。如果有人需要查看我的代码,我会提出来。我的应用程序正在3.1.3 SDK中编写。
如果有人有任何可以提供帮助的信息,我们将非常感激。
答案 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];
传递被触摸的对象,以便您可以识别它并采取相应的行动。