Swift3:UITableViewCell 和 UIButton - 通过单击 UIButton 显示和隐藏 UITableViewCell
Posted
技术标签:
【中文标题】Swift3:UITableViewCell 和 UIButton - 通过单击 UIButton 显示和隐藏 UITableViewCell【英文标题】:Swift3: UITableViewCell and UIButton - Show and hide UITableViewCell by clicking the UIButton 【发布时间】:2016-12-23 09:23:12 【问题描述】:我对@987654323@ 还很陌生,目前正在开发一个关于 ios 应用的学校项目。
我在链接UITableViewCell
和UIButton
时遇到了困难。
This is how my app looks like
基本上,我想要做的是,当我单击 UIButton 时,它会将单元格(日记和趋势)的高度降低到 0(隐藏单元格) 和 增加单元格的高度(共享和如何使用 BP 监视器)(以显示单元格) - 假设单元格(共享和如何使用 BP 监视器)现在是“隐藏”的。
如果有可以效仿的例子,请欣赏。
非常感谢:)
*在尝试了@Sandeep Bhandari 给出的例子之后
这是我的 ViewController 中的代码:
类 TableViewController: UITableViewController var expandCellIndex : 索引路径? = 无
override func numberOfSections(in tableView: UITableView) -> Int return 1
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return 5
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
var cell : UITableViewCell! = nil
if indexPath == expandedCellIndex
cell = tableView.dequeueReusableCell(withIdentifier: "expandedCell") as! ExpandedTableViewCell
(cell as! ExpandedTableViewCell).label1.text = "shown"
(cell as! ExpandedTableViewCell).label2.text = "Efgh"
(cell as! ExpandedTableViewCell).label3.text = "xyz"
else
cell = tableView.dequeueReusableCell(withIdentifier: "simpleCell") as! SimpleTableViewCell
(cell as! SimpleTableViewCell).label.text = "abcd"
return cell
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
if self.expandedCellIndex == indexPath
self.expandedCellIndex = nil
else
self.expandedCellIndex = indexPath
self.tableView.reloadData()
override func viewDidLoad()
super.viewDidLoad()
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 140
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
我无法得到与建议的答案相同的输出。
My Output
非常感谢!
【问题讨论】:
您遇到了什么问题?您可以根据需要增加行高 是的,你可以做到 在 indexPath 处实现行的高度,在点击按钮时要求 tableView 重新加载。索引路径处的行的高度根据按钮状态返回高度 要扩展单元格吗?如果只增加高度,您可以设置一个参数,当您单击按钮时,该参数设置单元格的高度 @TinuDahiya 我的问题是我不确定如何在单击按钮时对该部分进行编码,它会调用该函数来增加单元格的高度。 【参考方案1】:这是一个简单的代码,它不仅可以让您扩展特定单元格,还可以扩展所有单元格。如果您只想扩展一个单元格,您也可以这样做。
第 1 步:
在故事板中声明两个动态原型单元。
我们将红色的称为 SimpleCell,将绿色的称为 ExpandedCell。
第 2 步:
为每个单元格添加可重复使用的标识符。
第 3 步
为这两个单元创建自定义类并为标签创建 IBOutlets。
第 4 步:
现在在你的 VC 的 ViewDidLoad 中写这个。
override func viewDidLoad()
super.viewDidLoad()
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 140
第 5 步:
假设一次只能扩展一个单元格,我声明一个 IndexPathVariable,如果您希望扩展多个单元格,则始终可以声明数组。
var expandedCellIndex : IndexPath? = nil
第 6 步:
编写tableView数据源代码。
覆盖 func numberOfSections(in tableView: UITableView) -> Int 返回 1
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return 5
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
var cell : UITableViewCell! = nil
if indexPath == expandedCellIndex
cell = tableView.dequeueReusableCell(withIdentifier: "expandedCell") as! ExpandedTableViewCell
(cell as! ExpandedTableViewCell).label1.text = "abcd"
(cell as! ExpandedTableViewCell).label2.text = "Efgh"
(cell as! ExpandedTableViewCell).label3.text = "xyz"
else
cell = tableView.dequeueReusableCell(withIdentifier: "simpleCell") as! SimpleTableViewCell
(cell as! SimpleTableViewCell).label.text = "abcd"
return cell
第 7 步:
我在点击单元格时扩展单元格,您也可以在点击按钮时执行此操作:) 在按钮的 IBAction 中编写此逻辑 lemme 将其写入 didSelectRow 中。
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
if self.expandedCellIndex == indexPath
self.expandedCellIndex = nil
else
self.expandedCellIndex = indexPath
self.tableView.reloadData()
结论:
免责声明
我使用的是动态单元格高度,因此没有写入 heightForRowAtIndexPath,因为单元格的高度将自动计算。
如果您在单元格中使用任何没有隐式大小的 UIComponents,您可能必须如下实现 heightForRowAtIndexPath。
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
if self.expandedCellIndex == indexPath
return expnadedCellHeight
else
return simpleCellHeight
【讨论】:
非常感谢您的回复!对于我的代码,我没有使用原型细胞。这个答案适用于非原型细胞吗? 不使用原型单元是什么意思?您必须在 tableview 中有单元格,或者您必须在单元格中有 xibs 无论如何在所有情况下它都有效:) 我已经尝试过您的答案,但无法显示绿色单元格中的 3 个标签。 我可以在哪里分享代码?太长了,无法在评论中粘贴。 编辑您的问题好友并仅粘贴重要的方法,例如 tableview 的代表,您的逻辑以查找点击的按钮,然后您在哪里重新加载类似的 tableview 内容:D以上是关于Swift3:UITableViewCell 和 UIButton - 通过单击 UIButton 显示和隐藏 UITableViewCell的主要内容,如果未能解决你的问题,请参考以下文章
Swift 3 - 从 xib 加载的 UITableViewCell - 自动布局和高度不正确
从另一个视图控制器单击 uitableviewcell 后,swift 3 更改 uitableviewcell?
想知道如何以编程方式在 swift 3.0 中对 UITableViewCell 进行子类化?
Swift 3:TPKeyboardAvoidingScrollView 在 UITableViewCell 中的一个 UITextField 上无法正常工作