Eri*_*icB 2 iphone objective-c uiscrollview uiviewcontroller uikit
我编写了一个UIViewController的子类,它以编程方式创建一个视图,而不是从NIB文件加载它.
它有一个简单的loadView方法:
- (void)loadView
{
UIScrollView *mainScrollView =
[[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.view = mainScrollView;
[mainScrollView release];
}
Run Code Online (Sandbox Code Playgroud)
...然后我会进行大量的初始化viewDidLoad,如文档所述.一切正常,我可以看到包含自定义视图的滚动视图.
我需要一个UIViewController来拥有视图,因为它是UINavigationBar工作流的一部分.由于我有一个控制器对象,我宁愿它做控制器的东西.
那么问题是我的视图控制器似乎不在响应链中. touchesBegan:withEvent:如果我在根视图或子视图中定义它,则调用它,但如果它在视图控制器本身中则不被调用.
Apple事件处理文档明确提到视图控制器应该在响应者链中.UIViewController文档没有说明除了将根视图分配给self.view属性之外所需的额外步骤,正如我上面所做的那样.UIResponder文档声称UIView应该弄清楚它是否有控制器并将事件传递给它.UIScrollView文档什么都没说.
我还尝试userInteractionEnabled:了所有视图和子视图的各种设置,没有运气.
我错过了什么?
EricB,只有在没有处理的情况下才会向响应者链发送触摸.UIScrollView显然处理所有触摸事件,因此它不向它发送任何内容的nextResponder.对我来说很有意义.
你真正想要的是在UIScrollView的滚动逻辑处理之前"过滤"触摸事件.但请注意,响应者链是这项工作的错误工具,正是因为它不允许在处理之前拦截事件.
在您的情况下,最好的解决方案可能是子类UIScrollView,覆盖触摸方法(touchesBegan等)并在调用之前手动将事件发送给委托[super touchesXxx].
| 归档时间: |
|
| 查看次数: |
6549 次 |
| 最近记录: |