Em uma tela do meu app eu tenho um segmented control com 3 segments, para alternar entre eles eu criei 3 Cocoa Touch Class com 3 arquivos .xib, estou usando o método switchViewAction onde para cada segmento eu seto um dos controllers (usando também sua view .xib).
Um desses arquivos. xib é uma tabela, e como não é possível criar uma tabela e colocar células dentro da tabela vizualmente (como no vídeo), eu criei um arquivo .xib (com seu controller) que representa minha célula.
Até aí tudo bem, customizei minha célula, liguei os componentes dela ao seu controller, e dentro da tableControll usei o seguinte código para setar a célula na tabela:
let identifier = "cell2"
var listaProdutos:Array<Produto> = [Produto(descricao:"Nike Air Max", classe:" ", setor:"Esporte", fornecedor:"FornecNike", marca:"Nike", codigoBarras:" ", precoAtacado:70.0, precoVarejo:90.0, imagem: []),
Produto(descricao:"Cordinha", classe:" ", setor:"Esporte", fornecedor:"FornecNike", marca:"Nike", codigoBarras:" ", precoAtacado:70.0, precoVarejo:90.0, imagem: []),
Produto(descricao:"Netuno", classe:" ", setor:"Esporte", fornecedor:"FornecNike", marca:"Nike", codigoBarras:" ", precoAtacado:70.0, precoVarejo:90.0, imagem: []),
Produto(descricao:"Montrejo", classe:" ", setor:"Esporte", fornecedor:"FornecNike", marca:"Nike", codigoBarras:" ", precoAtacado:70.0, precoVarejo:90.0, imagem: [])
]
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(UINib(nibName: "TableViewCell2", bundle: nil), forCellReuseIdentifier: identifier)
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return listaProdutos.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = (tableView.dequeueReusableCell(withIdentifier: identifier, for: indexPath) as! TableViewCell2)
let produto = listaProdutos[indexPath.row]
cell.label.text = "\(produto.descricao) - \(produto.marca) - \(produto.precoAtacado)"
return cell
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 100
}
Através desse código eu consigo renderizar a célula dentro da tabela corretamente, porem quando eu faço alguma interação (click ou scroll) as celulas somem, isso também acontece quando troco de tela e volto para esta tela.
Ao meu ver as células apenas foram renderizadas quando chama o método viewDidLoad, após qualquer interação elas somem. Coloquei a linha
tableView.register(UINib(nibName: "TableViewCell2", bundle: nil), forCellReuseIdentifier: identifier)
dentro do método cellForRowAt, mas obtive o mesmo resultado, tentei colocar no viewWillAppear, porém o compilador não aceita.
Alguém pode me ajudar a fazer com que as células funcionem da maneira esperada? Ou sabem outra maneira de trabalhar com células customizadas dentro de uma table .xib?