我是Swift 3.0
的新手,目前正在开设IOS应用的学校项目。
我在UITableViewCell
和UIButton
的关联方面遇到了困难。
基本上,我要做的是当我点击UIButton时,它会将单元格的高度(日记和趋势)降低到0(隐藏单元格) 和 增加细胞的高度(分享和如何使用血压监测仪)(显示细胞) - 假设细胞(分享和如何使用血压监测)现在被“隐藏”。
欣赏是否有一个例子可供遵循。
非常感谢:)
*在尝试@Sandeep Bhandari给出的例子之后
这是我的ViewController中的代码:
class TableViewController:UITableViewController { var expandedCellIndex:IndexPath? = nil
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.
}
我无法获得与建议的答案相同的输出。
非常感谢你!
答案 0 :(得分: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(在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
}
}