ios - 控制器或视图类中的 UIScroll 回调
问题描述
我有一个子类UITableview
(下面的代码)。我在我的视图控制器中使用了这个类。我想在我的表类中调用滚动视图。如何在LargeTitleTableview
课堂上获得回调?或者滚动回调只会出现在控制器类中?我是否缺少任何委托或设置?
import Foundation
import UIKit
protocol LargeTitleTableviewDelegate: class {
func scrollHua(largeTitleTableview: LargeTitleTableview, scrollViewInstance scrollView: UIScrollView)
}
class LargeTitleTableview: UITableView, UITableViewDelegate, UIScrollViewDelegate {
weak var largeTitleTableviewDelegate: LargeTitleTableviewDelegate?
override func awakeFromNib() {
super.awakeFromNib()
configureTableView()
}
fileprivate func configureTableView() {
self.contentInset = UIEdgeInsets(top: 100, left: 0, bottom: 0, right: 0)
self.scrollIndicatorInsets = self.contentInset
let view = UIView(frame: CGRect(x: 0, y: -100, width: 200, height: 100))
view.backgroundColor = .red
self.addSubview(view)
self.delegate = self
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
print("Callback is not coming in this class")
largeTitleTableviewDelegate?.scrollHua(largeTitleTableview: self, scrollViewInstance: scrollView)
}
}
解决方案
你已经声明
class LargeTitleTableview: UITableView, UITableViewDelegate, UIScrollViewDelegate
您可以删除 UIScrollViewDelegate。如果这是表格视图的委托,它是滚动视图的委托;它们是同一个对象和同一个委托。
目前尚不清楚您认为 LargeTitleTableviewDelegate 的用途。我只想删除它。
然而,让表视图成为自己的委托是非常奇怪的。这整个架构似乎是一个糟糕的选择。应该不需要继承 UITableView。如果你使用 UITableViewController,它是 table view 的数据源和委托,你不应该试图破坏它。
推荐阅读
- reactjs - 如何在 TypeScript 中将此通用类型作为参数传递
- excel - 比较更改列表中的值的公式
- jquery - jQuery 可以在桌面上运行,但不能在移动设备上运行
- c - 循环:倒计时直到数字中的所有数字都是奇数
- swift - 由可搜索固定的focusedSceneValue
- primeng - Primeflex 3 和 angular 12 无法渲染
- mosek - 强制释放 Mosek 许可证(直接从其许可证服务器)
- php - 试图重定向到另一个页面
- mysql - MySQL #1452 - 无法添加或更新子行:外键约束失败 ON DELETE CASCADE ON UPDATE CASCADE)
- javascript - 如何从地图对象的值执行函数