【发布时间】:2020-07-15 08:55:25
【问题描述】:
我在 tableview 中显示饮料的类别。在每个单元格中显示类别名称并有一个复选框按钮。在按钮单击复选框图像从“选中图像”更改为“未选中图像”。
我想区分当用户按下“应用”按钮时哪些单元格显示了“已检查图像”。然后从每个选定的单元格(其按钮显示“已检查图像”图像的单元格)中获取 categoryLabel 并将它们保存在数组中。
复选框类:
class CheckBox: UIButton
{
override func awakeFromNib()
{
let checkedImage = UIImage(named: "checked-image")! as UIImage
let uncheckedImage = UIImage(named: "unchecked-image")! as UIImage
self.setImage(uncheckedImage, for: .normal)
self.setImage(checkedImage, for: .selected)
self.addTarget(self, action: #selector(buttonClicked), for: .touchUpInside)
self.isSelected = true
}
@objc func buttonClicked(sender: UIButton)
{
if sender == self {
sender.isSelected = !sender.isSelected
}
}
}
表格视图:
class FilterViewController: UIViewController {
var categories = [Category]()
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var applyButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
getCategories()
}
@IBAction func applyButtonClicked(_ sender: UIButton) {
print("Filter applied")
// save checked buttons
}
func getCategories() {
let url = URL(string: "https://www.thecocktaildb.com/api/json/v1/1/list.php?c=list")
URLSession.shared.dataTask(with: url!) { (data, response, error) in
if error == nil {
do {
self.categories = try JSONDecoder().decode(Categories.self, from: data!).drinks
DispatchQueue.main.async {
self.tableView.reloadData()
}
} catch {
print(error)
}
}
}.resume()
}
}
extension FilterViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return categories.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "categoryCell", for: indexPath) as! CategoryCell
cell.categoryLabel.text = categories[indexPath.row].strCategory
cell.styleButton()
return cell
}
}
类别模型:
struct Categories:Decodable {
var drinks: [Category]
}
struct Category:Decodable {
var strCategory: String
}
饮料模型:
struct Response:Decodable {
var drinks: [Drink]
}
struct Drink:Decodable {
var strDrink: String
var strDrinkThumb: String
}
类别单元格:
class CategoryCell: UITableViewCell {
@IBOutlet weak var categoryLabel: UILabel!
@IBOutlet weak var checkBoxButton: CheckBox!
}
我的应用:
【问题讨论】:
-
您是否在问如何在应用启动之间保留用户数据/选择?
-
我想区分当用户按下“应用”按钮时哪些单元格显示了“已检查图像”。然后从每个选定的单元格中获取 categoryLabel 并将它们保存在数组中。
标签: ios swift uitableview button checkbox