Как добавить и удалить ячейку табличного представления на основе выбора элемента управления сегментом - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь добавить и удалить ячейки табличного представления на основе состояния контроллера сегмента, встроенного в другую настраиваемую ячейку табличного представления.

Пожалуйста, смотрите изображение ниже для желаемой функциональности:

enter image description here

Желаемый результат для ячейки 1 и 2 должен всегда отображаться со значением ячейки 2, изменяющимся в зависимости от состояния контроллера сегмента в ячейке 1. Кроме того, ячейка 3 появляется только в том случае, если в сегменте ячейки 2 выбраны определенные состояния. контроллер.

Я хотел бы анимировать добавление и удаление ячейки 3 в качестве всплывающего окна.

Я настроил оператор If Else в cellForRowAt, который проверяет массив Ints, представляющих разные пользовательские ячейки, содержащие разные сегментированные контроллеры.

В настоящее время я пытаюсь вызвать метод из IBAction, связанного с 1-м сегментированным контроллером, func insertCustomSegmentcell, который вставляет новую строку в табличное представление и добавляет к массиву Ints (которые представляют различные контроллеры сегмента).

Я проверял, что функция работает и что массив обновляется, и это так. Но клетки не добавляются.

Если я жестко закодирую дополнительные ячейки в массиве: ArrayOfsegmentCellData и перезапущу приложение, оно работает.

На данный момент я просто пытался добавить дополнительную ячейку и не написал функцию удаления.

Я только начинаю со Swift и программирования в целом. Любая помощь и руководство очень приветствуются. Без сомнения, есть гораздо лучший способ приблизиться к этому!

Заранее спасибо.

Мы имеем дело только с разделом 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)


        }

}

}
...