具有不同部分的 CheckBox UITableView
Posted
技术标签:
【中文标题】具有不同部分的 CheckBox UITableView【英文标题】:CheckBox UITableView with Different Sections 【发布时间】:2017-06-06 15:04:06 【问题描述】:尝试使用包含不同部分的复选框按钮创建 UITableview,我如何设法为新部分中的每个按钮分配唯一标签。由于 indexpath.row 将在每个新部分中重复,因此不能使用 indexpath.row
【问题讨论】:
这是不使用标签来识别行的原因之一。相反,当您“选中该框”时,您应该更新您的数据源。这样,每当 tableview 重新加载该单元格时(例如,在滚动之后),您就可以控制复选框的状态。 这是一个简单的例子——它使用UISwitch
而不是“复选框”...但实际上是相同的:***.com/questions/44369289/…
我有 UIButton,UISwitch 确实有 sender.isOn 属性,但是只有一个 UIButton 会改变背景图片
我假设你已经添加了一些代码或属性或其他东西来跟踪你的 UIButton 的状态?
我有点困惑,在你的一个答案中你告诉更新数据源和另一个使用按钮状态,如果我使用按钮状态,我怎么知道哪个按钮被点击我将不得不设置唯一标签。如果我再次使用数据源,我将如何知道在哪个部分和行中点击了哪些按钮数据源?
【参考方案1】:
使用UIButton
的示例,带有已选中/未选中的背景图像以及开/关状态:
//
// TableWithCheckTableViewController.swift
// SWTemp2
//
// Created by Don Mag on 6/6/17.
// Copyright © 2017 DonMag. All rights reserved.
//
import UIKit
class MyCheckTableViewCell: UITableViewCell
@IBOutlet weak var myLabel: UILabel!
@IBOutlet weak var myCheckButton: UIButton!
var checkedImage = UIImage(named: "Checked")
var unCheckedImage = UIImage(named: "UnChecked")
var isOn: Bool = false
didSet
myCheckButton.setBackgroundImage(self.isOn ? checkedImage : unCheckedImage, for: .normal)
var checkTapAction : ((Bool)->Void)?
@IBAction func buttonTapped(_ sender: Any)
self.isOn = !self.isOn
checkTapAction?(self.isOn)
// simple data object
class MyCheckObject: NSObject
var theTitle = ""
var theCheckState = false
init(_ title: String)
theTitle = title
class TableWithCheckTableViewController: UITableViewController
// array of MyObjects
var myData = [MyCheckObject]()
override func viewDidLoad()
super.viewDidLoad()
// just to make it a little easier to see the rows scroll
tableView.rowHeight = 60
// create 40 data objects for the table
for i in 1...40
let d = MyCheckObject("Data Item: \(i)")
myData.append(d)
tableView.reloadData()
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int
return 1
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return myData.count
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "MyCheckTableViewCell", for: indexPath) as! MyCheckTableViewCell
// Configure the cell...
let d = myData[indexPath.row]
cell.myLabel.text = d.theTitle
cell.isOn = d.theCheckState
// set a "Callback Closure" in the cell
cell.checkTapAction =
(isOn) in
// update our Data Array to the new state of the switch in the cell
self.myData[indexPath.row].theCheckState = isOn
return cell
【讨论】:
完美!!!令人惊奇的是它的工作原理,不再设置唯一标签和不需要的代码以上是关于具有不同部分的 CheckBox UITableView的主要内容,如果未能解决你的问题,请参考以下文章
如何使父标签和子标签在b-form-checkbox上具有onclick而不重复
Word CheckBox ContentContol OnChange 事件