Swift tableview 单元格单选按钮实现
Posted
技术标签:
【中文标题】Swift tableview 单元格单选按钮实现【英文标题】:Swift tableview cell radio button implementation 【发布时间】:2018-09-18 20:09:43 【问题描述】:我需要在 tableview 自定义单元格中放置一个单选按钮。每当用户单击 tableview 单元格或按钮时,单选按钮都需要工作。我尝试使用下面的代码,但没有很好地执行。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell:TableViewCell = self.tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as! TableViewCell
cell.country.text = self.animals[indexPath.row]
cell.selectionStyle = UITableViewCellSelectionStyle.none;
if selectedRows.contains(indexPath)
cell.radioButton.setImage(UIImage(named:"check.png"), for: .normal)
else
cell.radioButton.setImage(UIImage(named:"uncheck.png"), for: .normal)
return cell
【问题讨论】:
什么不起作用?发生了什么?你预期会发生什么?在代码中放置断点会发生什么?阅读How to Ask 和minimal reproducible example 并更新您的问题。 【参考方案1】:这是一个在UITableView
中创建单选按钮的绝佳解决方案,使用需要零 代码的情节提要 - 并且有 2 个很棒的酷提示!!
确保您的表格视图设置为单选,并使用静态单元格。
添加一个Basic单元格,将图像设置为未选中的按钮图像,并确保选择样式为Default
酷提示#1:单击并选择单元格的图像视图,然后将其突出显示的图像设置为选中状态。当单元格被突出显示或选择时,其中的图像视图将更改为显示其突出显示状态。 酷提示 #2: 接下来,将UIView
拖到单元格的内容视图中,位于文本标签后面。由于您使用的是基本单元格,因此无法将其直接拖放到单元格中,您需要将其拖入左侧的文档大纲中。然后将其连接到单元格的 选定背景视图 插座。选择单元格(或突出显示)时,将在后台显示此视图。在这种情况下,我们将使用它来防止出现灰色背景,因此将其颜色设置为 Clear。请注意,视图的大小无关紧要,也无需设置任何约束 - 它会在运行时自动调整大小以匹配单元格。
最后,复制此单元格并更改每个单选按钮选项的文本。构建并运行,您就有了无代码单选按钮!
【讨论】:
太棒了。我会尝试在这里更新你。非常感谢! @阿什利米尔斯【参考方案2】:在您的TableViewCell
类中,为什么不创建一个数据源元素并为其覆盖didSet
。同样在UITableView
的数据源中,我会推荐一个数组,而不仅仅是String
。
我还没有编译下面的,所以这只是一个想法。
import UIKit
class TableViewCell : UITableViewCell
var data: Animal?
didSet
self.country.text = data.description
if (data.isSelected)
self.radioButton.setImage(UIImage(named:"check.png"), for: .normal)
else
self.radioButton.setImage(UIImage(named:"uncheck.png"), for: .normal)
在您的视图控制器中,您当然必须在点击一行时设置isSelected
属性。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
var animal = self.animals[indexPath.row]
animal.isSelected = !animal.isSelected
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell:TableViewCell = self.tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as! TableViewCell
cell.data = self.animals[indexPath.row]
对于您的Animal
,可能是这样的:
struct Animal
var description: String
var isSelected: Bool
【讨论】:
您会因为在单元格上设置属性而不是直接更新其插座而获得赞成票。 我会在这里尝试更新你@Dennis White 非常感谢你以上是关于Swift tableview 单元格单选按钮实现的主要内容,如果未能解决你的问题,请参考以下文章
UIButton 状态在滚动带有多个部分的 tableview 时发生变化 - Swift
如何在swift 3中删除tableview中特定单元格的按钮