我已经尝试了几天了解Xcode子类和类别 - 毕竟我发现了一个被触发的事件。
- (void)setContentOffset:(CGPoint)contentOffset {
NSLog(@"foo");
}
更令人困惑的是,在阅读Apple iOS Documentation之后,我得到了这些东西:
- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated {
NSLog(@"bar");
}
第一个事件被触发,但Apple文档没有。为什么呢?!
但是在第一种情况下,虽然他被解雇了,但UIScrollView失去了他们的滚动/拖动'反弹行为。我认为这是因为在覆盖setContentOffset
之后我需要调用父方法来保持UIScrollView的默认行为。但是我已经厌倦了测试过时的Xcode方法。
为什么没有触发第二个代码以及如何调用父代重写方法?
提前致谢。
答案 0 :(得分:1)
在这里调用super(:parent)
- (void)setContentOffset:(CGPoint)contentOffset {
NSLog(@"foo New Offset x: %.0f y: %.0f", contentOffset.x, contentOffset.y);
[super setContentOffset:contentOffset];
}
而且,对于第二个;这不是委托方法(:event),这是一个实际提供给开发人员的方法,用于启动滚动到具有/不具有动画的特定偏移。您可能不需要覆盖它。
- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated;
更多;即使第一个不是一个事件,这是一个发送到scrollview以改变偏移量的消息,但你可以介入并使用它作为事件触发器做你的事情,再次调用super来让它做它的工作。
如果您想在scrollView上获取真实事件,则需要设置一个委托,如此处所述; https://developer.apple.com/library/ios/documentation/uikit/reference/UIScrollViewDelegate_Protocol/Reference/UIScrollViewDelegate.html#//apple_ref/occ/intf/UIScrollViewDelegate
我同意Wain分享此链接, https://developer.apple.com/library/ios/documentation/general/conceptual/DevPedia-CocoaCore/Delegation.html