删除特定节中的UITableView单元格



有一个任务。通过单击要删除此单元格的按钮,每个单元格都包含一个按钮。问题是,部分被用来按类别描述整个列表。我从Realm DB获取的数据。删除必须在两种情况下进行,因为名称是重复的,所以您需要考虑标签中的名称和节的名称。我将非常感谢带有注释的示例代码。

import UIKit
import RealmSwift
class PurchesViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var purchesTableView: UITableView!
let manage = ManagerData()
override func viewDidLoad() {
super.viewDidLoad()
purchesTableView.delegate = self
purchesTableView.dataSource = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
purchesTableView.reloadData()
}
func numberOfSections(in tableView: UITableView) -> Int {
return manage.loadPurchases().0.count
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return manage.loadPurchases().0[section]
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return manage.loadPurchases().1[section].count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "purchesCell", for: indexPath) as! CustomPurchesTableViewCell
cell.productLabel.text = manage.loadPurchases().1[indexPath.section][indexPath.row]
cell.weightProductLabel.text = manage.loadPurchases().2[indexPath.section][indexPath.row]
cell.weightNameLabel.text = manage.loadPurchases().3[indexPath.section][indexPath.row]
//        cell.boughtButton.addTarget(self, action: #selector(removeProduct), for: .touchUpInside)
return cell
}
}
class CustomPurchesTableViewCell: UITableViewCell {
@IBOutlet weak var boughtButton: UIButton!
@IBOutlet weak var productLabel: UILabel!
@IBOutlet weak var weightProductLabel: UILabel!
@IBOutlet weak var weightNameLabel: UILabel!
@IBAction func removePurches(_ sender: Any) {
print("remove")
}
}

数据获取方法

func loadPurchases() -> ([String], Array<Array<String>>, Array<Array<String>>, Array<Array<String>>) {
var sections: [String] = []
var product = Array<Array<String>>()
var weight = Array<Array<String>>()
var nameWeight = Array<Array<String>>()
let realm = try! Realm()
let data = realm.objects(Purches.self)
for item in data {
if sections.contains(item.nameDish) == false {
sections.append(item.nameDish)
}
}
for a in sections {
var productArr = Array<String>()
var weightArr = Array<String>()
var nameWeightArr = Array<String>()
for prod in data {
if a == prod.nameDish {
productArr.append(prod.product)
weightArr.append(prod.weight)
nameWeightArr.append(prod.nameWeigh)
}
}
product.append(productArr)
weight.append(weightArr)
nameWeight.append(nameWeightArr)
}
return (sections, product, weight, nameWeight)
}

在单元格类中获得的索引路径对于表视图,索引路径有两个属性部分和行

现在,您可以在Controller类中创建更多方法,并为每个单元格分配一个变量,也可以使用表视图提供的editAction来删除

为了获得数字部分和行,您需要在自定义单元格中创建IBOutlet,并在ViewController上为按钮创建addTarget类。底部的示例代码。

import UIKit
import RealmSwift
class PurchesViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var purchesTableView: UITableView!
let manage = ManagerData()
//... more code ...
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "purchesCell", for: indexPath) as! CustomPurchesTableViewCell
cell.productLabel.text = manage.loadPurchases().1[indexPath.section][indexPath.row]
cell.weightProductLabel.text = manage.loadPurchases().2[indexPath.section][indexPath.row]
cell.weightNameLabel.text = manage.loadPurchases().3[indexPath.section][indexPath.row]
cell.boughtButton.addTarget(self, action: #selector(removePurches(_:)), for: .touchUpInside)
return cell
}
@objc func removePurches(_ sender: UIButton) {
let position: CGPoint = sender.convert(CGPoint.zero, to: purchesTableView)
let indexPath: IndexPath! = self.purchesTableView.indexPathForRow(at: position)
print("indexPath.row is = (indexPath.row) && indexPath.section is = (indexPath.section)")
purchesTableView.deleteRows(at: [indexPath], with: .fade)
}
}

和用于单元格的自定义类CustomPurchesTableViewCell

class CustomPurchesTableViewCell: UITableViewCell {
@IBOutlet weak var boughtButton: UIButton! // you button for press
@IBOutlet weak var productLabel: UILabel!
@IBOutlet weak var weightProductLabel: UILabel!
@IBOutlet weak var weightNameLabel: UILabel!
}

最新更新