我制作了一个tableviewcell,并且其中有一个按钮。我在tableviewcell.swift类中连接了按钮的IBAction。然后,我创建了一个委托,并像这样访问viewcontroller类中的按钮触摸动作。
func optionTap(cell: SlideUpTableViewCell) {
if let indexPath = tableview?.indexPath(for: cell) {
}
}
但是我想要实现的是,我希望一次只选择一个复选框按钮。我有3行,现在我可以同时点击3个按钮中的每一个,而我一次只想点击1个按钮。也就是说,如果我点击第一个单元格上的按钮,然后点击第二个单元格中的按钮,则应该自动取消选择第一个单元格按钮。简而言之,正常的单选工作原理...
我已经尝试过了...但是它不起作用...
func optionTap(cell: SlideUpTableViewCell) {
if let indexPath = tableview?.indexPath(for: cell) {
if selectedArrayIndex.contains(indexPath.row) {
selectedArrayIndex.remove(at: selectedArrayIndex.index(of: indexPath.row)!)
cell.checkBobButton.tintColor = ThemeManager.current().inactiveGrayColor
cell.checkBobButton.setImage(UIImage(named: "circle_stroke"), for: .normal)
} else {
selectedArrayIndex.append(indexPath.row)
cell.checkBobButton.tintColor = ThemeManager.current().secondaryColor
cell.checkBobButton.setImage(UIImage(named: "circle_tick"), for: .normal)
}
}
}
编辑1:。这是cellForRow。.
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: SlideUpTableViewCell = tableView.dequeueReusableCell(withIdentifier: cellID) as! SlideUpTableViewCell
cell.delegate = self
cell.selectionStyle = .none
cell.headingLabel.text = self.arrData[indexPath.row].heading
cell.subHeadingLabel.text = self.arrData[indexPath.row].subHeading
return cell
}
编辑2 :这是用户界面的外观。
答案 0 :(得分:1)
首先,您不需要按钮操作。请按照以下步骤进行简单而完美的编码:
在控制器中var selectedIndex = -1
//如果未选择任何索引,则采用-1,如果要默认选择任何选项,则进行相应的更改。
使用tableView
委托方法didSelectRowAt indexPath
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
selectedIndex = indexPath.row
myTblView.reloadData()
}
现在要切换btn只需在cellForRow
中进行。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! Mycell
:
cell.myBtn.isSelected = indexPath.row == selectedIndex
:
return cell
}
现在在情节提要中,为所选状态和默认状态分配按钮图像。
答案 1 :(得分:0)
// if you want to use didselect or diddeselect than :
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let cell = tableView.cellForRow(at: indexPath)as? tableViewCell{
cell.mRadioimage.image = UIImage(named: "radioCheckedImage")
}
}
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
if let cell = tableView.cellForRow(at: indexPath)as? tableViewCell{
cell.mRadioimage.image = UIImage(named: "radioUnCheckedImage")
}
}
// don't forget to choose singleSelection
// hope its work for you