我最近开始学习iOS开发,但遇到了一些问题。
我有自定义单元格的tableview:标签,图像视图(默认隐藏)和一个按钮。 我想让它工作,以便当单击按钮单元格时,将显示图像视图。 问题是每次重复使用单元时,都会显示重用单元的图像视图。 我想让它工作,这样如果按下第一个单元格的按钮,则只显示第一个单元格图像视图。如果按下第一个和第三个单元格的按钮,则图像视图应仅显示第一行和第三行,而不显示任何其他行。
我目前的解决方案:
class CustomTableViewCell: UITableViewCell {
@IBOutlet var cellTitleLabel: UILabel!
@IBOutlet var cellImageView: UIImageView!
var showImageView = false
@IBAction func showImageViewAction(sender: UIButton) {
showImageView = true
displayCell()
}
func displayCell() {
if showImageView {
cellImageView.hidden = false
} else {
cellImageView.hidden = true
}
}
}
对于视图控制器:
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 30
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("CustomCell", forIndexPath: indexPath) as! CustomTableViewCell
return cell
}
func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
let customCell = cell as! CustomTableViewCell
customCell.displayCell()
}
有关如何创建以便在重复使用单元格时隐藏图像视图的任何建议吗?
答案 0 :(得分:1)
如果您必须保存cellImageview.hidden
状态,请执行以下操作:
添加协议以通知MainClass按下actionButton:
protocol customCellDelegate{
func actionButtonDidPressed(tag: Int, value: Bool)
}
比你的CustomTableViewCell声明
var delegate: customCellDelegate?
并在@IBAction func showImageViewAction(sender: UIButton)
添加:
@IBAction func showImageViewAction(sender: UIButton) {
cellImageView.hidden = ! cellImageView.hidden
delegate?.actionButtonDidPressed(self.tag, value: imageCell.hidden)
}
在mainView中使其符合customCellDelegate
var status = [Bool]()
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let rowCount = 100
for _ in 0 ..< rowCount{
status.append(true)
}
return rowCount
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell") as! customcell
cell. cellImageView.hidden = true
cell. cellImageView.hidden = status[indexPath.row]
cell.delegate = self
cell.tag = indexPath.row
return cell
}
func actionButtonDidPressed(tag: Int, value: Bool) {
status[tag] = value
}