快速单击其中一个 tableview 单元格内的按钮后重新加载 tableview
Posted
技术标签:
【中文标题】快速单击其中一个 tableview 单元格内的按钮后重新加载 tableview【英文标题】:Reload tableview after clicking the button present inside one of the tableview cell in swift 【发布时间】:2020-10-13 04:01:38 【问题描述】:我有一个包含单元格数量的表格视图。每个单元格都有一个按钮。通过单击按钮,将打开一个下拉框。我希望当我单击特定单元格的按钮时,将显示特定单元格的下拉框,而隐藏不同单元格的所有其他下拉框。
我的代码是
@IBAction func dropDown2ButtonAction(_ sender: UIButton)
if buttonTag == getIndexPath()!.row
if isdropDownSelected2
isdropDownSelected2 = false
else
isdropDownSelected2 = true
else
if let index = getIndexPath()
buttonTag = index.row
isdropDownSelected2 = false
delegate?.updateTableView(completion: [self] (updated) in
if updated
isdropDownSelected2 = true
)
获取索引路径
func getIndexPath() -> IndexPath?
guard let superView = self.superview as? UITableView else
print("superview is not a UITableView - getIndexPath")
return nil
let indexPath = superView.indexPath(for: self)
return indexPath
显示或隐藏我的 tableView 的代码
var isdropDownSelected2 = false
didSet
if isdropDownSelected2 == true
showTable2()
else
hideTable2()
private func showTable2()
tableView2.isHidden = false
private func hideTable2()
tableView2.isHidden = true
更新我的表格视图的代码
func updateTableView(completion: @escaping (Bool) -> Void)
tableView.reloadData
completion(true)
extension UITableView
func reloadData(completion:@escaping ()->())
UIView.animate(withDuration: 0, animations: self.reloadData() )
_ in completion()
在我的表格视图 cellFor row at indexpath 函数中
LcodeTableViewCell?.dropDownBox2.tag = indexPath.row
LcodeTableViewCell?.delegate = self
if LcodeTableViewCell?.tableView1.isHidden == false
LcodeTableViewCell?.tableView1.isHidden = true
if LcodeTableViewCell?.tableView2.isHidden == false
LcodeTableViewCell?.tableView2.isHidden = true
这里的buttonTag是一个变量
var buttonTag = 0
我在这里做错了什么?我认为tableview重新加载问题就在这里。
【问题讨论】:
【参考方案1】:很容易解决,
每次单击按钮时,都会在控制器中记录索引,然后重新加载 tableView。
在单元格配置中,如果单元格的indexPath与记录索引匹配,则其子表显示,其余子表隐藏。
如果按两次按钮,控制器中的记录索引为nil
,然后重新加载tableView,所有cell的子表隐藏。
我命名模式、标记和配置
你的代码很混乱
根据您的代码,我认为LcodeTableViewCell
是一个对象,而不是一个类。
@IBAction func dropDown2ButtonAction(_ sender: UIButton)
if buttonTag == getIndexPath()!.row
buttonTag == getIndexPath()!.row
,永远是真的。
// 错误代码 ...
【讨论】:
以上是关于快速单击其中一个 tableview 单元格内的按钮后重新加载 tableview的主要内容,如果未能解决你的问题,请参考以下文章
当在同一个单元格内单击按钮时,如何在自定义表格视图单元格内隐藏/显示特定视图
在tableview单元格内创建动态collectionView
完成在单元格内编辑 textview 后向 tableview 添加另一个单元格