【发布时间】:2019-01-12 08:23:49
【问题描述】:
在 tableview 中,每个单元格都有一个书签图像按钮。点击它时,它会处于选中状态并显示图像(红色书签图标)。我有委托方法将带有选定按钮的单元格中的信息添加到数组中:
protocol CustomPoetCellDelegate {
func cell(_ cell: CustomPoetCell, didTabFavIconFor button: UIButton)
}
class CustomPoetCell: UITableViewCell {
@IBOutlet weak var poetNameLabel: UILabel!
@IBOutlet weak var verseCountLabel: UILabel!
@IBOutlet weak var periodLabel: UILabel!
@IBOutlet weak var iconButton: UIButton!
var delegate: CustomPoetCellDelegate?
override func awakeFromNib() {
super.awakeFromNib()
iconButton.setImage(UIImage(named: "icons8-bookmark-50-red.png"), for: .selected)
iconButton.setImage(UIImage(named: "icons8-bookmark-50.png"), for: .normal)
iconButton.isSelected = false
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
@IBAction func favIconTapped(_ sender: UIButton) {
delegate?.cell(self, didTabFavIconFor: sender)
}
}
在tableViewController中:
func cell(_ cell: CustomPoetCell, didTabFavIconFor button: UIButton) {
if !button.isSelected {
let indexPathRow = tableView.indexPath(for: cell)!.row
if isFiltering() {
favoritePoets.append(searchResults[indexPathRow])
button.isSelected = true
} else {
favoritePoets.append(poets[indexPathRow])
button.isSelected = true
}
} else {
button.isSelected = false
favoritePoets = favoritePoets.filter { $0.arabicName != cell.poetNameLabel.text}
}
}
isFiltering() 方法检查 searchBar 是否正在处理中。
现在,如果 isFiltering() 为假,一切都很好,但如果 isFiltering() 为真(即在 tableView 中搜索名称),当我点击特定单元格按钮以选择它然后单击取消时要关闭 searchBar,还选择了其他单元格的图标,尽管只有我点击的那个被添加到数组中。在视图中来回导航时,错误的选择消失了,只选择了正确的选择。
知道发生了什么吗?
提前致谢。
【问题讨论】:
标签: ios swift uitableview uibutton uisearchbar