2

我正在尝试观察自定义类代表。我从

public var didTapAvatar: Observable<()> {
    return delegate
        .methodInvoked(#selector(JSQMessagesCollectionViewDelegateFlowLayout.collectionView(_:didTapAvatarImageView:at:)))
        .map { _ in ()
    }
}

这将导致如下错误

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[RxCocoa.RxCollectionViewDelegateProxy collectionView:layout:heightForCellTopLabelAtIndexPath:]: 无法识别的选择器发送到实例 0x618000298b00

我后来试过这个

public var jsqdelegate: DelegateProxy {
    return RxJSQMessageCollectionViewCellProxy(parentObject: base)
}

public var didTapAvatar: Observable<()> {
    return jsqdelegate
        .methodInvoked(#selector(JSQMessagesCollectionViewDelegateFlowLayout.collectionView(_:didTapAvatarImageView:at:)))
        .map { _ in ()
    }

这将成功运行,但将立即完成并处置,如将它们打印到控制台上所示:

self.collectionView.rx.didTapAvatar.asObservable()
    .subscribe(onNext: { (event) in
        print("next")
    }, onError: { (error) in
        print("error")
    }, onCompleted: { 
        print("complete")
    }, onDisposed: { 
        print("disposed")
    }).disposed(by: disposeBag)

RxJSQMessageCollectionViewCellProxy.swift

public class RxJSQMessageCollectionViewCellProxy: DelegateProxy, JSQMessagesCollectionViewDelegateFlowLayout, DelegateProxyType {

public class func currentDelegateFor(_ object: AnyObject) -> AnyObject? {
    let collectionView: JSQMessagesCollectionView = object as! JSQMessagesCollectionView
    return collectionView.delegate
}

public class func setCurrentDelegate(_ delegate: AnyObject?, toObject object: AnyObject) {
    let collectionView: JSQMessagesCollectionView = object as! JSQMessagesCollectionView
    collectionView.delegate = delegate as? JSQMessagesCollectionViewDelegateFlowLayout
}

}

JSQMessagesCollectionView+RxCreate.swift

extension Reactive where Base: JSQMessagesCollectionView {
    public var didTapAvatar: Observable<()> {
        return delegate.methodInvoked(#selector(JSQMessagesCollectionView.messagesCollectionViewCellDidTapAvatar(_:))).map { _ in () }
    }
}
4

0 回答 0