Abh*_*tra 7 uitableview uikit ios
我正在使用自定义单元格作为我的部分标题UITableView.在那个单元格中有三个按钮.如果在该部分的单元格中单击了任何按钮,则应仅重新加载该自定义部分单元格,而不是任何行.这可能吗?
我使用以下代码重新加载该单元格:
tableViewHome.reloadSections([1], with: UITableViewRowAnimation.none)
Run Code Online (Sandbox Code Playgroud)
它隐藏了我的部分细胞并扭曲了整个桌子.
UPDATE
我正在使用UITableView并遵循我正在使用的代码:
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let cellHeader = tableViewHome.dequeueReusableCell(withIdentifier: "header") as! HeaderTableViewCell
cellHeader.filter1btn.addTarget(self, action: #selector(filterBtnAction(_:)), for: .touchUpInside)
cellHeader.filter2Btn.addTarget(self, action: #selector(filterBtnAction(_:)), for: .touchUpInside)
cellHeader.filter3btn.addTarget(self, action: #selector(filterBtnAction(_:)), for: .touchUpInside)
return cellHeader
}
@IBAction func filterBtnAction(_ sender: UIButton) {
print(sender.tag)
tableViewHome.reloadSections([1], with: UITableViewRowAnimation.none)
}
Run Code Online (Sandbox Code Playgroud)
我有点不清楚这里发生了什么,但听起来这里有一个UITableView值得解释的概念:
UITableView有自己的单元格概念,实现为UITableViewCell,以及自己的页眉/页脚概念,实现为UITableViewHeaderFooterView。
根据您的意思是这两者中的哪一个,您可以采取一些措施来获得预期的效果:
UITableViewCell方法:如果您使用 aUITableViewCell作为部分的第一行来充当“标题”,并且您只想重新加载该行以排除该部分的其余部分,则可以调用yourTableViewInstance.reloadRows(at:with:) (Apple 文档)此方法采用IndexPaths数组和动画样式。您可以传入要重新加载的索引路径。
UITableViewHeaderFooterView方法:如果您使用的是适当的,UITableViewHeaderFooterView那么您需要确保在重新加载该部分时提供适当的视图。Zack Shapiro概述了您在此答案中需要采取的步骤:
UITableViewHeaderFooterView。UITableView实例。viewForHeaderInSection,你做let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: "HeaderView") as! YourHeaderViewSubclass他指出的最后一件事是:
具有欺骗性的事情是该函数
UIView?在它真正需要dequeuedReusableHeaderFooterView或reloadData将导致它消失时调用返回。
这取决于您采用这两种实现路径中的哪一种,但这应该足以为您指明正确的方向。
根据您添加的代码,看起来您正在调用yourTableViewInstance.dequeueReusableCell(withIdentifier:for:)而不是yourTableViewInstance.dequeueReusableHeaderFooterView(withIdentifier:)在viewForHeaderInSection.
您需要有一个子类,UITableViewHeaderFooterView然后正确调用它。创建新的子类,然后更改:
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let cellHeader = tableViewHome.dequeueReusableCell(withIdentifier: "header") as! HeaderTableViewCell
// ...
Run Code Online (Sandbox Code Playgroud)
对此:
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let cellHeader = tableViewHome.dequeueReusableHeaderFooterView(withIdentifier: "header") as! HeaderTableView
// ...
Run Code Online (Sandbox Code Playgroud)
您需要在此处执行两个步骤:
UITableViewHeaderFooterView而不是UITableViewCell.