如何基于段控件选择添加和删除tableview单元格

时间:2019-04-17 11:34:00

标签: ios swift uitableview uisegmentedcontrol

我试图根据嵌入在另一个自定义表格视图单元格中的段控制器的状态添加和删除表格视图单元格。

请参见下图以获得所需功能:

enter image description here

期望的结果是始终显示单元格1和2,并根据单元格1中段控制器的状态更改单元格2的值。此外,仅当在单元格2的段中选择了某些状态时,才弹出单元格3控制器。

我想以动画形式显示添加和删除单元格3的弹出窗口。

我已经在cellForRowAt中设置了If Else语句,该语句将检查一个Ints数组,这些数组代表包含不同分段控制器的不同自定义单元格。

当前,我正在尝试从链接到第一个分段控制器的func insertCustomSegmentcell的IBAction调用一个方法,该方法将新行插入到表视图中并追加到Ints数组(代表不同的分段控制器)上。 / p>

我一直在检查函数是否起作用以及数组是否正在更新。但是未添加单元格。

如果我将多余的单元格硬编码到数组中:ArrayOfsegmentCellData并重新运行它可以运行的应用程序。

目前,我只是试图添加一个额外的单元格,而没有编写删除功能。

我只是从Swift和Programming入手,非常感谢任何帮助和指导。毫无疑问,有更好的方法来解决这个问题!

谢谢。

我们只关注与以下内容相关的表格视图的第0部分:

 var ArrayOfsegmentCellData

TableViewController

import UIKit

struct CellData {
    let image : UIImage?
    let message : String?
}

struct SegmentCellData {
    let cell : Int!
}

class TableViewController: UITableViewController {

    var data = [CellData]() // Section 2 Data
    var ArrayOfsegmentCellData = [SegmentCellData(cell: 1),SegmentCellData(cell: 2)] // Section 1 Data



    override func viewDidLoad() {
        super.viewDidLoad()

        navigationItem.title = "Add Item"
        navigationController?.navigationBar.prefersLargeTitles = true
        data = [CellData.init(image: UIImage(named: "Icon-60") , message: "1")]
        self.tableView.register(CustomCell.self, forCellReuseIdentifier: "custom")
        self.tableView.rowHeight = UITableView.automaticDimension
        self.tableView.estimatedRowHeight = 200

    }

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


        if indexPath.section == 0 {

            if ArrayOfsegmentCellData[indexPath.row].cell == 1 {
                let cell = Bundle.main.loadNibNamed("Level1Cell", owner: self, options: nil)?.first as! Level1Cell

                return cell

            } else if ArrayOfsegmentCellData[indexPath.row].cell == 2 {
                let cell = Bundle.main.loadNibNamed("Level2CellA", owner: self, options: nil)?.first as! Level2CellA

                return cell

            } else if ArrayOfsegmentCellData[indexPath.row].cell == 3 {
                let cell = Bundle.main.loadNibNamed("Level2CellB", owner: self, options: nil)?.first as! Level2CellB

                return cell


            } else {


            }
        }


            let cell = self.tableView.dequeueReusableCell(withIdentifier: "custom") as! CustomCell
            cell.mainImage = data[indexPath.row].image
            cell.message = "Cell Number: \((data[indexPath.row].message)!)    -- Section: \(indexPath.section) Row: \(indexPath.row)"
            cell.layoutSubviews()

            return cell
        }




    //MARK: -  Number of Sections in TableView

    override func numberOfSections(in tableView: UITableView) -> Int {
        return 2
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if section == 0 {
            return ArrayOfsegmentCellData.count
        } else {
            return 1
//                data2.count
        }
    }




    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        if section == 0 {
            return "Header 1"
        } else if section == 1 {
         return   "Header 2"
        } else {
            return "Defualt Header - out of range"
        }
    }


    func insertCustomSegmentcell(cellInt:Int){
        print("Inside insertCustomSegmentcell")
        print("ARRAYCOUNT 1st \(ArrayOfsegmentCellData.count)")

        ArrayOfsegmentCellData.append(SegmentCellData(cell: cellInt))
        print("Array == \(ArrayOfsegmentCellData)")
        print("ARRAYCOUNT 2nd \(ArrayOfsegmentCellData.count)")


        let indexPath = IndexPath(row: ArrayOfsegmentCellData.count, section: 0)


        tableView.beginUpdates()

        tableView.insertRows(at: [indexPath], with: .automatic).self

        tableView.endUpdates()


    }
}

Level1Cell-链接到自定义单元格XIB

import UIKit

class Level1Cell: UITableViewCell {
    var tvc = TableViewController()

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

    @IBAction func Level1SegmentCellChanged(_ sender: UISegmentedControl) {
        if sender.selectedSegmentIndex == 0 {

            print("Location Segment Sender = A1")
            tvc.insertCustomSegmentCell(cellInt: 2)

        } else {

            print("Location Segment Sender = B1")
            tvc.insertCustomSegmentCell(cellInt: 3)


        }

}

}

0 个答案:

没有答案