Como implementar uma lista com um grande número de células no iOS?
sobes.tech IA
Resposta da IA
Para mostrar listas grandes, usam-se UITableView ou UICollectionView. Implementam o padrão de reutilização de células (Cell Reuse), que permite gerir eficientemente a memória e o desempenho.
Passos principais:
-
Criar
UITableViewouUICollectionView: Coloque uma instância da classe correspondente na tela. -
Atribuir DataSource e Delegate: Defina o controlador ou outro objeto como
dataSourceedelegate.// Exemplo para UITableView tableView.dataSource = self tableView.delegate = selfdataSourceé responsável por fornecer os dados para a lista (número de secções/linhas, conteúdo das células).delegategere eventos relacionados com a interação do utilizador com as células (seleção, deslizes, etc.) e a aparência.
-
Registar células: Registe as classes de células (
UITableViewCellouUICollectionViewCell) para reutilização. Pode usar classes ou nibs.// Exemplo de registo de uma célula personalizada de UITableView tableView.register(MyCustomCell.self, forCellReuseIdentifier: "MyCellIdentifier") // Exemplo de registo de uma célula personalizada a partir de nib tableView.register(UINib(nibName: "MyCustomCell", bundle: nil), forCellReuseIdentifier: "MyCellIdentifier") -
Implementar métodos
dataSource: Métodos obrigatórios paraUITableViewDataSource:numberOfSections(in:): Retorna o número de secções.tableView(_:numberOfRowsInSection:): Retorna o número de linhas na secção.tableView(_:cellForRowAt:): Método chave para reutilização. Aqui, a célula é solicitada do pool.
// Exemplo de implementação de tableView(_:cellForRowAt:) func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { // Obter a célula do pool para reutilização guard let cell = tableView.dequeueReusableCell(withIdentifier: "MyCellIdentifier", for: indexPath) as? MyCustomCell else { fatalError("Impossível obter MyCustomCell") // Tratamento de erro } // Configurar conteúdo da célula com base nos dados let item = data[indexPath.row] // Assume-se um array de dados cell.configure(with: item) // Exemplo de método de configuração return cell } -
Implementar métodos
delegate(opcional): Por exemplo, para tratar o clique numa célula:// Exemplo de tratamento de seleção de célula func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let selectedItem = data[indexPath.row] // Executar ação com o elemento selecionado print("Selecionado: \(selectedItem)") }
Princípio de reutilização de células:
O sistema iOS mantém um pool de células que já não são exibidas na tela. Quando é necessário mostrar uma nova célula (por exemplo, ao rolar), em vez de criar uma nova, o sistema usa uma célula previamente criada nesse pool. O método dequeueReusableCell(withIdentifier:for:) solicita essa célula. Isto poupa memória e recursos computacionais.
UICollectionView:
Funciona de forma semelhante ao UITableView, mas oferece maior flexibilidade na disposição dos elementos (grades, layouts personalizados). Requer implementação de UICollectionViewDataSource e UICollectionViewDelegate. Em vez de linhas e células, opera com elementos (items) e secções.
O uso de UITableView ou UICollectionView com reutilização de células é a forma padrão e mais eficiente de mostrar listas grandes no iOS.