aga*_*ndi 4 uiscrollview ios uicollectionview
我有一个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
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,MyScrollViewDelegate可能必须是NSObject此类的子类.
| 归档时间: |
|
| 查看次数: |
1177 次 |
| 最近记录: |