Member 12959299 Ответов: 1

Как разделить tableview на разделы без изменения модели


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

Размещение только релевантного кода:

Модель:

Что я уже пробовал:

struct Product:Equatable {
    let imagename: UIImage
}

var productarray = [
    Product(imagename:#imageLiteral(resourceName: "blue")),
    Product( imagename:#imageLiteral(resourceName: "CakeImage")),Product(imagename:#imageLiteral(resourceName: "vectorlogo")),
    Product(imagename:#imageLiteral(resourceName: "PeasImge")),Product(imagename:#imageLiteral(resourceName: "castle")),
    Product( imagename:#imageLiteral(resourceName: "scoobydoo")),Product(imagename:#imageLiteral(resourceName: "ufo")),
    Product( imagename:#imageLiteral(resourceName: "wolfsky")),Product( imagename:#imageLiteral(resourceName: "universe")),
    Product(imagename:#imageLiteral(resourceName: "werewolf")),Product(  imagename:#imageLiteral(resourceName: "galaxy"))
]

class ProductViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    let sections = ["Section A", "Section B","Section C", "Section D","Section E"]
    let rowspersection = [2,3,2,2,2]
    @IBOutlet weak var tableView: UITableView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.delegate = self
        tableView.dataSource = self
    }
    
    func numberOfSections(in tableView: UITableView) -> Int {
        return sections.count
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return rowspersection[section]
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let data = productarray[indexPath.row]
        let cell = tableView.dequeueReusableCell(withIdentifier: "ProductTableViewCell") as! ProductTableViewCell
        cell.imageView?.image =  data.imagename
        cell.myParent = self
        return cell
    }
    
    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 44
    }
    
    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        
        switch(section) {
        case 0: return "Section A"
        case 1: return "Section B"
        case 2: return "Section C"
        case 3: return "Section D"
        case 4: return "Section E"
        default: return ""
        }
    }
}


Объясняя результат в симуляторе, так как я не могу загрузить скриншот здесь -

Изображения в “productarray” в модели “struct Product” являются:

синий, CakeImage, vectorlogo, PeasImge, замок, scoobydoo , НЛО, wolfsky, Вселенная, оборотень, галактика

но конечным продуктом в симуляторе является:

Раздел а: синий, CakeImage

Раздел в: синий, CakeImage, vectorlogo

Раздел с: Синий, CakeImage

Раздел D: синий, CakeImage

Раздел е: синий, CakeImage

то есть изображения/ячейки повторяются, чего я не хочу. Я хочу, чтобы секции были размещены между ячейками/изображениями так, как я хочу. Пожалуйста, помогите мне.

чего я хочу, так это:-

Раздел а: синий, CakeImage

Секция в: векторлого, Пизимге, замок

Секция с: Скубиду , НЛО,

Раздел D: wolfsky, universe

Секция E: оборотень, галактика

Примечание: Я не хочу менять модель "struct Product", потому что тогда мне придется изменить другой обширный код, который я здесь не упомянул.

Я буду в долгу, если вы мне поможете.

Gerry Schmitz

Общим фактором являются первые два (2) элемента в вашем массиве; это должно вам что-то сказать (включая "2" ... например, возможно, Ваш массив rowspersection).

Member 12959299

На этот вопрос был дан ответ здесь - https://stackoverflow.com/a/64057717/7444874

Member 12959299

На этот вопрос был дан ответ здесь - https://stackoverflow.com/a/64057717/7444874

1 Ответов

Рейтинг:
1

Member 12959299

На этот вопрос был дан ответ здесь - https://stackoverflow.com/a/64057717/7444874