当前位置:  开发笔记 > IOS > 正文

iOS将scrollView和collectionView委托分开为单个文件

如何解决《iOS将scrollView和collectionView委托分开为单个文件》经验,为你挑选了1个好方法。

我有一个UICollectionView,并希望能够在用户滚动实现scrollView委托方法时执行自定义行为.在使用collectionView时,是否可以使用两个单独的对象作为collectionView委托和scrollView委托?



1> rob mayoff..:

你不能有单独的代表.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此类的子类.

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有