UIScrollView子类触发事件

时间:2013-09-14 20:15:31

标签: ios objective-c uiscrollview

我已经尝试了几天了解Xcode子类和类别 - 毕竟我发现了一个被触发的事件。

- (void)setContentOffset:(CGPoint)contentOffset {
    NSLog(@"foo");
}

更令人困惑的是,在阅读Apple iOS Documentation之后,我得到了这些东西:

- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated {
    NSLog(@"bar");
}

第一个事件被触发,但Apple文档没有。为什么呢?!

但是在第一种情况下,虽然他被解雇了,但UIScrollView失去了他们的滚动/拖动'反弹行为。我认为这是因为在覆盖setContentOffset之后我需要调用父方法来保持UIScrollView的默认行为。但是我已经厌倦了测试过时的Xcode方法。

为什么没有触发第二个代码以及如何调用父代重写方法?

提前致谢。

1 个答案:

答案 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