forwardingTarget не вызывается в Swift4 - PullRequest
0 голосов
/ 13 мая 2018

Я создал проект для многократного использования прокрутки и столкнулся с проблемой, с которой мне довольно сложно разобраться. forwardingTarget(for aSelector: Selector!) как-то никогда не вызывается в подклассе UIScrollView. Это фрагмент:

// MARK: Overriding

override open func responds(to aSelector: Selector!) -> Bool {

    let respondesToSelector: Bool = super.responds(to: aSelector) ||  _delegate?.responds(to: aSelector) == true

    return respondesToSelector
}

override open func forwardingTarget(for aSelector: Selector!) -> Any? {
    if _delegate?.responds(to: aSelector) == true {
        return _delegate
    }
    else {
        return super.forwardingTarget(for: aSelector)
    }
}

Чтобы добавить ... есть еще одна проблема - например, scrollViewDidScroll не перехватывается responds(to aSelector: Selector!) - фактически он перехватывает почти все методы делегата UIScrollView. Странно только 1 метод пойман scrollViewWillEndDraggingWithVelocity:targetContentOffset:

Этот проект создан с открытым исходным кодом. ReusableScrollView

Буду признателен за вашу помощь и, конечно, вклад.

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Первоначально в коде я настроил делегат следующим образом:

override weak open var delegate: UIScrollViewDelegate? {
    didSet {
        _delegate = delegate as? ReusableScrollViewDelegate
    }
}

Что, очевидно, является неполным.Отсутствовал делегат, связанный с суперклассом.Правильная реализация выглядит следующим образом

override weak open var delegate: UIScrollViewDelegate? {
    get {
        return _delegate
    }
    set {
        _delegate = newValue as? ReusableScrollViewDelegate
        super.delegate = self
    }
}
0 голосов
/ 13 мая 2018

Невозможно воспроизвести. Я скачал ваш проект и изменил его с помощью логирования следующим образом:

override open func forwardingTarget(for aSelector: Selector) -> Any? {
    print("forwardingTarget called for selector", aSelector)
    // ...
}

Консоль показывает:

forwardingTarget called for selector title

Поэтому утверждать, что forwardingTarget никогда не вызывается, неоправданно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...