Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Customização da célula em um arquivo .xib

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?

3 respostas

Olá Gilmar, tudo bem?

Pode compartilhar o projeto comigo? Assim consigo debugar...

Abs.

solução!

Boa tarde Andriu!

Acabei modificando o projeto, e não tenho mais a versão como estava.

Consegui o que queria, porém sem usar um .xib para table, usei a tabela como padrão dentro do contêiner, e quando alternava para o segmento da tabela eu seto a própria tableview (no lugar de setar a view do .xib table).

Ahh legal...

Geralmente eu uso TableViewCell para as células da TableView... mas as vezes que eu precisei usar xib funcionou também...

Mas ainda bem que deu certo :]

Qualquer coisa chama aqui

Abs.