eug*_*ene 6 iphone super touch
大多数重载方法都需要[super theMethod]调用.
(例如[super viewDidLoad];,[super viewWillAppear];和[super dealloc];)
我没有想过我是否需要[super touchesBegan:withEvent:]打电话,但它似乎在某种程度上发挥了作用.
什么时候需要它,当没有我需要它?
我正在尝试以编程方式取消触摸事件,这似乎与我提出的问题有关.
MHC*_*MHC 18
虽然这一切都取决于对象的预期行为,但让我们指出基本的:如果你想要超类实现的默认行为,你可以在重写方法中调用超类实现(你的意思是覆盖,而不是重载).
所以你应该问的问题是:
1)超类实现有什么作用?
2)我的对象需要它吗?
那么touchesBegan:withEvent:你的超类等有什么作用呢?这取决于您的类层次结构.类层次结构中的自定义类可能已经覆盖了这些方法,您可能想要这些行为.我假设没有自定义类已经覆盖了这些方法,所以你必须只检查Cocoa实现.
touchesBegan:withEvent:首先在UIResponder类中定义.让我们来看看UIResponder文件,它说
此方法的默认实现不执行任何操作.但是,UIResponder的UIKit子类,特别是UIView,会立即将消息转发到响应者链.
所以你在这里得到一个理论.如果你的类直接继承自UIResponder,你根本不需要调用超类实现,因为它无论如何都不会执行任何操作.如果它继承自其他UIKit子类(如UIView),则调用超类实现将启用在响应程序链中转发消息.但是,覆盖touchesBegan:withEvent:可能意味着您的子类本身想要处理触摸事件,因此您不希望将事件转发到响应者链.所以,我想你不想在这里调用超类实现.
这取决于具体情况.比如,您将UIScrollView子类化,并实现其中一个touches...方法.如果您仍希望视图在用户拖动时滚动,那么您需要调用超类实现,因为它将为您处理滚动.
总而言之,您必须能够回答上述两个问题才能做出决定.要了解超类实现的功能,请在Apple文档中阅读相关内容.在许多情况下,如果超类实现的作用对于常见的预期行为至关重要,那么指南文档会给出调用超类实现的明确建议.
| 归档时间: |
|
| 查看次数: |
2904 次 |
| 最近记录: |