我有一个UICollectionView,并希望能够在用户滚动实现scrollView委托方法时执行自定义行为.在使用collectionView时,是否可以使用两个单独的对象作为collectionView委托和scrollView委托?
你不能有单独的代表.UICollectionView
是它的子类UIScrollView
,并覆盖其delegate
属性以将其类型更改为UICollectionViewDelegate
(其子类型UIScrollViewDelegate
).因此,您只能将一个委托分配给集合视图,并且它可以实现UICollectionViewDelegate
方法和UIScrollViewDelegate
方法的任意组合.
但是,您可以UIScrollViewDelegate
毫不费力地将方法转发到另一个对象.以下是你在Swift中的表现; 它在Objective-C中非常相似(因为这都是使用Objective-C运行时完成的):
import UIKit import ObjectiveC class ViewController: UICollectionViewController { let scrollViewDelegate = MyScrollViewDelegate() override func respondsToSelector(aSelector: Selector) -> Bool { if protocol_getMethodDescription(UIScrollViewDelegate.self, aSelector, false, true).types != nil || protocol_getMethodDescription(UIScrollViewDelegate.self, aSelector, true, true).types != nil { return scrollViewDelegate.respondsToSelector(aSelector) } else { return super.respondsToSelector(aSelector) } } override func forwardingTargetForSelector(aSelector: Selector) -> AnyObject? { if protocol_getMethodDescription(UIScrollViewDelegate.self, aSelector, false, true).types != nil || protocol_getMethodDescription(UIScrollViewDelegate.self, aSelector, true, true).types != nil { return scrollViewDelegate } else { return nil } }
请注意,MyScrollViewDelegate
可能必须是NSObject
此类的子类.