在 Swift4 中未调用 forwardingTarget
Posted
技术标签:
【中文标题】在 Swift4 中未调用 forwardingTarget【英文标题】:forwardingTarget not called in Swift4 【发布时间】:2018-05-13 17:35:28 【问题描述】:我为可重复使用的滚动视图创建了项目,但我偶然发现了一个我很难弄清楚的问题。
forwardingTarget(for aSelector: Selector!)
在 UIScrollView 的子类中永远不会调用它。
这是一个sn-p:
// 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 委托方法被它捕获。奇怪的是只有一种方法被捕获scrollViewWillEndDraggingWithVelocity:targetContentOffset:
这个项目是作为开源创建的。 ReusableScrollView
感谢您的帮助,当然还有贡献。
【问题讨论】:
仅供参考 - 扩展实际上并不支持覆盖方法。它在 Swift 书中明确说明。请参阅Extensions 章节开头的第一个注释。 【参考方案1】:最初在我这样设置委托的代码中:
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
【讨论】:
以上是关于在 Swift4 中未调用 forwardingTarget的主要内容,如果未能解决你的问题,请参考以下文章
在 UICollectionViewController 中未调用 searchbarsearchbuttonclicked
在 PagedListAdapter 中未调用 onCreateViewHolder
在 iPad 中未调用supportedInterfaceOrientations
在 Android 中未调用 onlocationchanged