Sobes.tech
Junior

Kako implementirati listu sa velikim brojem ćelija na iOS?

sobes.tech АИ

Одговор од АИ

Za prikaz velikih spiskova koriste se UITableView ili UICollectionView. Oni implementiraju obrazac ponovne upotrebe ćelija (Cell Reuse), koji omogućava efikasno upravljanje memorijom i performansama.

Glavni koraci:

  1. Kreiranje UITableView ili UICollectionView: Postavite instancu odgovarajuće klase na ekran.

  2. Dodeljivanje DataSource i Delegate: Postavite kontroler ili drugi objekat kao dataSource i delegate.

    // Primer za UITableView
    tableView.dataSource = self 
    tableView.delegate = self
    
    • dataSource je odgovoran za pružanje podataka za listu (broj sekcija/redova, sadržaj ćelija).
    • delegate upravlja događajima povezanim sa interakcijom korisnika sa ćelijama (izbor, swipe itd.) i konfiguracijom izgleda.
  3. Registracija ćelija: Registrujte klase ćelija (UITableViewCell ili UICollectionViewCell) za ponovnu upotrebu. Možete koristiti klase ili nib fajlove.

    // Primer registracije prilagođene UITableViewCell iz klase
    tableView.register(MyCustomCell.self, forCellReuseIdentifier: "MyCellIdentifier")
    
    // Primer registracije prilagođene UITableViewCell iz nib
    tableView.register(UINib(nibName: "MyCustomCell", bundle: nil), forCellReuseIdentifier: "MyCellIdentifier")
    
  4. Implementacija metoda dataSource: Obavezne metode za UITableViewDataSource:

    • numberOfSections(in:): Vraća broj sekcija.
    • tableView(_:numberOfRowsInSection:): Vraća broj redova u sekciji.
    • tableView(_:cellForRowAt:): Ključna metoda za ponovnu upotrebu. U ovoj metodi se traži ćelija iz pool-a.
    // Primer implementacije `tableView(_:cellForRowAt:)`
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        // Dobijanje ćelije iz pool-a za ponovnu upotrebu
        guard let cell = tableView.dequeueReusableCell(withIdentifier: "MyCellIdentifier", for: indexPath) as? MyCustomCell else {
            fatalError("Nemoguće je odabrati MyCustomCell") // Obrada greške
        }
        
        // Podešavanje sadržaja ćelije na osnovu podataka
        let item = data[indexPath.row]
        cell.configure(with: item) // Primer metode za podešavanje ćelije
        
        return cell
    }
    
  5. Implementacija metoda delegate (opciono): Na primer, za obradu klika na ćeliju:

    // Primer obrade selekcije ćelije
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let selectedItem = data[indexPath.row]
        // Izvršite akciju sa izabranim elementom
        print("Izabrano: \(selectedItem)")
    }
    

Princip ponovne upotrebe ćelija:

Sistem iOS održava pool ćelija koje više nisu prikazane na ekranu. Kada je potrebno prikazati novu ćeliju (npr. pri skrolovanju), umesto da se kreira nova, sistem koristi već kreiranu ćeliju iz tog pool-a. Metoda dequeueReusableCell(withIdentifier:for:) traži takvu ćeliju. Ovo znatno štedi memoriju i računarske resurse.

UICollectionView:

Radi slično UITableView, ali pruža veću fleksibilnost u rasporedu elemenata (mreže, prilagođeni layouti). Zahteva implementaciju UICollectionViewDataSource i UICollectionViewDelegate. Umesto redova i ćelija, radi sa elementima (items) i sekcijama.

Korišćenje UITableView ili UICollectionView sa ponovnom upotrebom ćelija je standardni i najefikasniji način prikaza velikih spiskova u iOS-u.