Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何为UICollectionView滑动ScrollViewDidScroll或其他scrollview方法_Ios_Swift_Method Swizzling - Fatal编程技术网

Ios 如何为UICollectionView滑动ScrollViewDidScroll或其他scrollview方法

Ios 如何为UICollectionView滑动ScrollViewDidScroll或其他scrollview方法,ios,swift,method-swizzling,Ios,Swift,Method Swizzling,我想为我的collection/tableview使用一些scrollview方法来跟踪一些事件。由于无法在collectionview中找到scrollViewDidScroll:Method,因此出现错误。我尝试使用下面的代码 extension UICollectionView { public override class func initialize() { struct Static { static var token: disp

我想为我的collection/tableview使用一些scrollview方法来跟踪一些事件。由于无法在collectionview中找到scrollViewDidScroll:Method,因此出现错误。我尝试使用下面的代码

extension UICollectionView
{

    public override class func initialize() {
        struct Static {
            static var token: dispatch_once_t = 0
        }

        // make sure this isn't a subclass
        if self !== UICollectionView.self {
            return
        }

        dispatch_once(&Static.token) {
            let originalSelector = #selector(self.scrollViewDidScroll(_:))
            let swizzledSelector = #selector(self.sp_scrollViewDidScroll(_:))

            let originalMethod = class_getInstanceMethod(self, originalSelector)
            let swizzledMethod = class_getInstanceMethod(self, swizzledSelector)

            let didAddMethod = class_addMethod(self, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod))

            if didAddMethod {
                class_replaceMethod(self, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod))
            } else {
                method_exchangeImplementations(originalMethod, swizzledMethod)
            }
        }
    }

    // MARK: - Method Swizzling

    func sp_scrollViewDidScroll(scrollView:UIScrollView) {
        self.sp_scrollViewDidScroll(animated)
        print("Swizzled sp_scrollViewDidScroll in place of scrollViewDidScroll")
    }
}
错误:类型UICollectionView没有成员“scrollViewDidScroll”


我认为您可以在UIScrollViewDelegate协议中找到该方法,而不是在类本身中。在collectionView的委托中实现它(UICollectionViewDelegate扩展了UIScrollViewDelegate)。最好的

有没有一种方法可以快速转换委托方法?它们和其他方法一样,所以是的。。。但是,由于这使用委托将实现转移到您选择的类/对象上,因此交换实现的想法是完全多余的,只需在委托和viola中按照您需要的方式实现即可。