ios - 在 Swift4 中未调用 forwardingTarget
问题描述
我为可重复使用的滚动视图创建了项目,但我偶然发现了一个我很难弄清楚的问题。
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 委托方法被它捕获。奇怪的是只有一种方法被捕获scrollViewWillEndDraggingWithVelocity:targetContentOffset:
该项目是作为开源创建的。可重用的滚动视图
我将感谢您的帮助,当然还有贡献。
解决方案
最初在代码中我以这种方式设置了委托:
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
}
}
推荐阅读
- php - 避免在每个 axios 请求 laravel 上创建新会话
- html - 需要通过按钮单击将golang数据发送到html
- rest - 如何使用 CKAN API 按组查询数据集?
- python - 使用seaborn绘制多组条形图+线图
- c - 试图将字符串解析为结构成员
- visual-studio-code - VS Code 如何让终端恢复到原始状态
- shell - Shell 脚本 - 斐波那契
- reactjs - 运行 Windows 安装程序后,Electron + React 应用程序中的自定义字体不起作用
- java - 删除级联类别子 (Java Hibernate JPA)
- pjsip - PJSIP 音频通话录音没有发生双向