0

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

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

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

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

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

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

为什么不触发第二个代码以及如何调用父覆盖方法?

提前致谢。

4

1 回答 1

1

在这里调用 super (:parent)

- (void)setContentOffset:(CGPoint)contentOffset {
    NSLog(@"foo  New Offset x: %.0f y: %.0f", contentOffset.x, contentOffset.y);
    [super setContentOffset:contentOffset];
}

而且,对于第二个;这不是委托方法(:事件),这是一种实际提供给开发人员的方法,用于启动滚动到具有/不具有动画的特定偏移量。您可能不需要覆盖它。

- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated;

更; 即使第一个也不是事件,这是发送到滚动视图以更改偏移量的消息,但是您可以介于两者之间并使用它作为事件触发器来执行您的操作,然后再次调用 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

于 2013-09-14T21:36:11.123 回答