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

Como criei esta tabela?

Seguindo as orientações do curso Swift 2 - Aula 1, escrevi o código abaixo:

import UIKit

class ViewController: UITableViewController {

    let meals = ["curry rice", "strognoff", "frango agridoce", "couve-flor com curry"]

    override func viewDidLoad() {
        super.viewDidLoad()
        print("tela carregada com sucesso")
    }

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

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let row = indexPath.row
        let meal = meals[row]
        let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: nil)
        cell.textLabel!.text = meal
        return cell
    }
}

No simulador apareceu a tabela, só que eu não tenho a menor idéia do que eu fiz.

Quando estou escrevendo o OverRide dessas funções, é porque elas seriam executadas inicialmente em outro lugar, certo? E esse lugar é o TableViewController?

Então, quando ele for carregar meu app, o TableViewController passa por um monte de função para poder criar a tabela na tela do aparelho, e eu interfiro em como ele vai criar esta tabela dando OverRide. É isso?

2 respostas
solução!

Olá Fabio!

Vou tentar explicar para você, ok?

logo no começo voce colocou: class ViewController: UITableViewController

O UITableViewController é um ViewController específico que já possui uma TableView. Com essa linha você criou a sua tela que é filha de UITableViewControllere por herança pode acessar, usar ou alterar os métodos da classe mãe.

Bom, como se trata de uma tabela, você precisa passar algumas informações para que ela consiga ser populada: Numero de seções, número de linhas de cada seção, o que fazer com cada célula/linha, entre outros. Para facilitar, a classe mãe já possui alguns métodos prontos, que você sobrescreve passando seus dados específicos. Para sobrescrever esses métodos você usa a palavra reservada override.

No seu exemplo, o primeiro método é o numberOfRowsInSection onde você informa quantas linhas deve ter na sua seção.

O segundo método é cellForRowAt indexPath que você diz o que deve ser populado na célula da posição especifica (indexpath).

Existem outros métodos específicos da UITableViewController que permitem layouts mais elaborados, como os que temos na app da Alura por exemplo. Você vai aprendendo aos poucos ;)

Espero ter ajudado a compreender o código!

Obrigado Tais! Ficou um pouco mais claro para mim. Vou continuar estudando e tentando entender um pouco mais sobre programação orientada a objetos. Depois de tantos anos programando de forma procedural, algumas coisa ficam nebulosas mesmo.