Как заполнить различные значения массива в представлении коллекции внутри UITableview, используя swift? - PullRequest
0 голосов
/ 11 октября 2018

Я создал UICollectionView внутри UITableView, заполнение значений массива в UItableview работает отлично, при попытке заполнить значения массива в collectionView, получая одинаковые значения в collectionView всех строк tableView, я хочу заполнить массив нулевого индекса вколлекционное представление нулевой строки UItableview и т. д. ниже я попробовал пример:

class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate,UICollectionViewDelegate,UICollectionViewDataSource{


        let array = ["product 1","product 2","product 3","product4"]
        let array1 = ["product id 1","product id 2","product id 3","product id 4"]
        let array2 = [["product id 1","product id 2"],["product id 3","product id 4"],["product id 5","product id 6"],["product id 7","product id 8","product id 9","product id 10","product id 11"]] as [NSArray]


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

        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let cell : TableViewCell = tableView.dequeueReusableCell(withIdentifier: "cells") as! TableViewCell
            cell.tableviewlabel1.text = array[indexPath.row]
             cell.tableviewlabel2.text = array1[indexPath.row]
            return cell
        }
     func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
            return array2.count
        }

        func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
            let cell : CollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "collection", for: indexPath) as! CollectionViewCell


            let rowValue : NSArray = array2[indexPath.row]
            for i in 0..<rowValue.count {
            cell.collectionviewlabel1.text = rowValue[i] as? String
            }
            return cell

        }

Например, я хочу нулевой индекс значений array2 в коллекционном представлении нулевой строки таблицы и первые индексные значения в коллекционном первомстрока таблицы и т. д.

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Сначала ваш array2 должен быть таким:

let array2 = [["product id 1","product id 2"],["product id 3","product id 4"],["product id 5","product id 6"],["product id 7","product id 8","product id 9","product id 10","product id 11"]]

Не используйте NSArray в Swift.Вы можете написать его как [String], [[String]].

Ваш ViewController будет иметь только UITableViewDelegate и UITableViewDatasource методы:

extension ViewController: UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return array.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell : TableViewCell = tableView.dequeueReusableCell(withIdentifier: "cells") as! TableViewCell
        cell.tableviewlabel1.text = array[indexPath.row]
        cell.tableviewlabel2.text = array1[indexPath.row]

        cell.arrayForCollectionView = array2
        return cell
    }
}

Тогда в вашем TableViewCell:

class TableViewCell: UITableViewCell {

    var arrayForCollectionView : [[String]]! {
        didSet {
            self.collectionView.reloadData
        }
    }

    @IBOutlet weak var collectionView: UICollectionView!

}

extension TableViewCell : UICollectionViewDataSource {
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        if (arrayForCollectionView != nil) {
            return arrayForCollectionView.count
        }
        return 0
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell : CollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "collection", for: indexPath) as! CollectionViewCell


        let rowValue = arrayForCollectionView[indexPath.row]
        for i in 0..<rowValue.count {
            cell.collectionviewlabel1.text = rowValue[i] as? String
        }
        return cell
    }
}

Дайте мне знать, если у вас возникли проблемы.

0 голосов
/ 11 октября 2018

Дайте пример для этого:

первый tableView находится внутри ViewController

 class ViewController: UIViewController {

//MARK:- IBOUTELTS
//MARK:-
@IBOutlet weak var tableView: UITableView!

//MARK:- VARIABLES
//MARK:-

override func viewDidLoad() {
    super.viewDidLoad()


}


}

extension YourViewConroller: UITableViewDataSource, UITableViewDelegate {

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {


}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {


}

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


}

}

А ваш CollectionView находится внутри TableViewCell

 extension YourTableViewCell: UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {


}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {



}

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

}


}

И сделать разные классы для TableView и CollectionView:

 class YourTableViewCell: UITableViewCell { // tableview cell

}


 classYourCollectionViewCell: UICollectionViewCell { // collectionviewcell

  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...