从 UITableview 中的数组中删除项目

Posted

技术标签:

【中文标题】从 UITableview 中的数组中删除项目【英文标题】:Remove item from array in UITableview 【发布时间】:2020-05-10 02:34:13 【问题描述】:

我想要完成的是,当用户为 UITableView 选择一个元素时,此元素将附加到 servicioseleccionadoarray。但我陷入了困境,因为如果用户决定取消选择我想从数组中删除该项目的单元格。我已经尝试过anyarray.remove(at:),但我可以找到进入该索引的方法。 这是我目前的代码。

class ServicioHogarViewController: UIViewController

    let serviciosHogar = [String](arrayLiteral: "Alfombras", "Muebles Madera", "Sillones", "Marmol", "Aplicación Teflón","Vestiduras", "Salas", "Colchones", "Sillas Oficinas")

    @IBOutlet weak var servicioHogarTB1: UITableView!

    var selectedIndex : Int? = nil

    var servicioSeleccionado : [String] = []

    @IBAction func doneButton(_ sender: UIButton) 
        performSegue(withIdentifier: "datePick2", sender: self)
    


    override func viewDidLoad() 
        super.viewDidLoad()
        servicioHogarTB1.delegate = self
        servicioHogarTB1.dataSource = self
        servicioHogarTB1.register(UINib(nibName: "ServicioHogarCell", bundle: nil), forCellReuseIdentifier: "servicioCell1")
        servicioHogarTB1.separatorStyle = .none

    

    override func viewWillDisappear(_ animated: Bool) 
        super.viewWillDisappear(true)
        print(servicioSeleccionado)
    



// MARK : UITabeView Delegation

extension ServicioHogarViewController : UITableViewDelegate, UITableViewDataSource

    func numberOfSections(in tableView: UITableView) -> Int 
        return 1
    

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
            return serviciosHogar.count
    

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
        if tableView.cellForRow(at: indexPath)?.accessoryType == .checkmark 
            tableView.cellForRow(at: indexPath)?.accessoryType = .none
         else 
            tableView.cellForRow(at: indexPath)?.accessoryType = .checkmark
        

        if tableView.cellForRow(at: indexPath)?.accessoryType == .checkmark 
            servicioSeleccionado.append(serviciosHogar[indexPath.row])
            print(servicioSeleccionado)
        

    

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 

            let cell = tableView.dequeueReusableCell(withIdentifier: "servicioCell1", for: indexPath) as! ServicioHogarCell
            let servicio = serviciosHogar[indexPath.row]
            cell.servicioLabel.text = servicio
            return cell

    




【问题讨论】:

【参考方案1】:

如果你有一个数组:

var cast = ["Vivien", "Marlon", "Kim", "Karl"]

如果你想从中删除“Marlon”,你可以使用数组的func firstIndex(of: Element) -> Int?方法找到Marlon的索引,然后像这样删除它:

if let index = cast.firstIndex(of: "Marlon")
  cast.remove(at: index)
  print(cast)

也就是说,在 didSelectRowAt 上为您的数组运行此函数,您将完成您想要的。

【讨论】:

非常感谢,帮了大忙。

以上是关于从 UITableview 中的数组中删除项目的主要内容,如果未能解决你的问题,请参考以下文章

从 Parse Array 中删除项目后 UITableView 崩溃

iOS 从 UITableView 滑动以删除 plist 中的数组

如何从数组中删除项目?

iPhone UITableView 从平面数组填充可变行部分

基于 SegmentedControl 有条件地重新加载 UITableView

从 UITableView 中删除单元格而不是从数组中