我需要我的tableView来启动一个事件:
override func tableView(_ tableView: UITableView, didEndDisplayingFooterView view: UIView, forSection section: Int)为了做到这一点,根据文档,我不能只向tableView添加这样的视图:
tableView.tableFooterView = spaceView它在工作时,不会使该函数被触发,也不会使表排掉页脚的队列,尽管表可能会有多长时间。
我不能在情节提要/ XIB中这样做,因为是否添加了页脚,这是一个只有在运行时才能做出的决定。
因此,根据文档,或者至少根据我对它们的理解,我必须将'spaceView‘作为UITableViewHeaderFooterView的一个子类,并且我必须做一个正式的“注册”才能将它添加到tableView中,如下所示:
let spaceView = UITableViewHeaderFooterView(reuseIdentifier: "emptyFooter")
tableView.register(spaceView, forHeaderFooterViewReuseIdentifier: "emptyFooter")但是,我得到了一个编译错误:
Cannot invoke 'register' with an argument list of type '(UITableViewHeaderFooterView, forHeaderFooterViewReuseIdentifier: String)'所以,尽管有医生,你知道我怎么看医生错了吗?
发布于 2018-06-30 20:36:10
谢谢你的建议,但这些建议都没有解决问题,也没有找到解决办法。
相反,我拥有的功能与我想要的完全一样,只有6行代码的小函数和视图控制器上的一个私有属性。
一旦tableView.footerView“离开屏幕”,它就立即被设置为零,并且它只是在我想要的时候才创建的。
发布于 2018-06-30 13:31:54
你的问题的正确答案是:
class CustomTableViewHeaderFooterView: UITableViewHeaderFooterView { }
class CustomTableViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(CustomTableViewHeaderFooterView.self, forHeaderFooterViewReuseIdentifier: "CustomTableViewHeaderFooterView")
}
}然后可以使用已注册的页眉/页脚视图,如下所示:
override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 44
}
override func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
let customFooterView = tableView.dequeueReusableHeaderFooterView(withIdentifier: "CustomTableViewHeaderFooterView")
// set up your footer view
return customFooterView
}为了实现您在评论中解释的内容,您不必注册任何UITableViewHeaderFooterView。相反,您可以使用表视图的tableFooterView并自己实现该功能。在您的UITableViewController类中尝试如下:
override func viewDidLoad() {
super.viewDidLoad()
let footerView = UIView()
footerView.backgroundColor = .orange
footerView.frame.size.height = 44
tableView.tableFooterView = footerView
}
var footerViewIsVisible = false {
didSet {
if !footerViewIsVisible && oldValue {
tableViewDidEndDisplayingTableFooterView(tableView)
}
}
}
func tableViewDidEndDisplayingTableFooterView(_ tableView: UITableView) {
print("didEndDisplayingTableFooterView")
tableView.tableFooterView = nil
}
override func scrollViewDidScroll(_ scrollView: UIScrollView) {
if let tableFooterView = tableView.tableFooterView {
let visibleRect = CGRect(origin: scrollView.contentOffset, size: scrollView.bounds.size)
self.footerViewIsVisible = visibleRect.intersects(tableFooterView.frame)
}
}发布于 2018-06-30 12:46:49
你可以这样做:
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 45
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 60))
headerView.backgroundColor = UIColor(red: 30/255, green: 30/255, blue: 32/255, alpha: 1.0)
return headerView
}https://stackoverflow.com/questions/51115023
复制相似问题