Добавление табличного представления в несколько ячеек коллекции - PullRequest
0 голосов
/ 29 марта 2019

Я столкнулся с проблемой с моим приложением.Я успешно сделал CollectionView с 5 ячейками, прокручивая по горизонтали.В каждой ячейке я хочу иметь табличное представление, которое будет отображать отдельные данные, полученные от Arduino.Но я не могу заставить просмотр таблицы отображаться вообще.

ALL код в этом представлении был сделан программно.

В частности, есть одна нить, которая дала мне надежду выяснить это самостоятельно.Я попробовал принятый ответ здесь: Как мне показать UITableView в UICollectionViewCell Но я все еще не работал.

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

Вот код моей коллекции:

class ViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout {

let cellId = "cellId"

 // Returns how many items in one sections
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return 5
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath)
    // displays different colors in all the 5 sections
    let colors: [UIColor] = [.blue, .green, .gray, .red, .orange]
    cell.backgroundColor = colors[indexPath.item]

    return cell
}

//Determines the size for each cell
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

    return CGSize(width: view.frame.width , height: view.frame.height - 50 )
}
//Minimize the line spacing between the sections ... return 0 (no spacing)
func  collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
    return 0
    }

А затем есть код таблицы:

class ReceivedCell: UICollectionViewCell {


lazy var tableView: UITableView = {
    let tv = UITableView()
    tv.delegate = self
    tv.dataSource = self
    tv.translatesAutoresizingMaskIntoConstraints = false
    return tv
}()


let tableViewCell = "tableViewCell"
var array = ["test", "test1", "test2"]

override init(frame: CGRect) {
    super.init(frame: frame)
    backgroundColor = UIColor.blue
    tableView.register(UITableViewCell.self, forCellReuseIdentifier: tableViewCell)
    setupTableView()
    //setupViews()

}

 required init?(coder aDecoder: NSCoder) {
    fatalError("Init(coder:) has not been implemented")
}
extension ReceivedCell: UITableViewDelegate, UITableViewDataSource {

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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: tableViewCell, for: indexPath)

    cell.textLabel?.text = array[indexPath.item]


    return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 50
}

}

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

РЕДАКТИРОВАТЬ

Я хочу иметь таблицу в каждом разделе 1 - 5

1 Ответ

0 голосов
/ 29 марта 2019

Я добавляю несколько кодов, чтобы следующие vcs работали так, как вы хотите.

class ViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout {

let cellId = "cellId"

override func viewDidLoad() {
    super.viewDidLoad()
    collectionView.register(ReceivedCell.self, forCellWithReuseIdentifier: cellId)
    // Do any additional setup after loading the view.
}


// Returns how many items in one sections
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return 5
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! ReceivedCell
    print(cell.contentView.frame)
    // displays different colors in all the 5 sections
    let colors: [UIColor] = [.blue, .green, .gray, .red, .orange]
    cell.backgroundColor = colors[indexPath.item]

    return cell
}

//Determines the size for each cell
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

    return CGSize(width: view.frame.width , height: view.frame.height - 50 )
}
//Minimize the line spacing between the sections ... return 0 (no spacing)
func  collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
    return 0
}


 }
  class ReceivedCell: UICollectionViewCell {


lazy var tableView: UITableView = {
    let tv = UITableView()
    tv.delegate = self
    tv.dataSource = self
    tv.translatesAutoresizingMaskIntoConstraints = false
    return tv
}()


let tableViewCell = "tableViewCell"
var array = ["test", "test1", "test2"]

override func didMoveToSuperview() {
    super.didMoveToSuperview()
    NSLayoutConstraint.activate([
        tableView.topAnchor.constraint(equalTo: topAnchor, constant: 20),
        tableView.bottomAnchor.constraint(equalTo: bottomAnchor,constant:  -20),
        tableView.leftAnchor.constraint(equalTo: leftAnchor,constant: 20),
        tableView.rightAnchor.constraint(equalTo: rightAnchor,constant: -20),
        ])
}

override init(frame: CGRect) {
    super.init(frame: frame)
    backgroundColor = UIColor.blue
    addSubview(tableView)
    tableView.register(UITableViewCell.self, forCellReuseIdentifier: tableViewCell)
    tableView.reloadData()

   // setupTableView()
    //setupViews()

}

required init?(coder aDecoder: NSCoder) {
    fatalError("Init(coder:) has not been implemented")
}

}

extension ReceivedCell: UITableViewDelegate, UITableViewDataSource {

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: tableViewCell, for: indexPath)

        cell.textLabel?.text = array[indexPath.item]


        return cell
    }
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 50
    }}
...