Sobes.tech
Junior

Hogyan valósítjuk meg egy listát sok cellával iOS-en?

sobes.tech MI

Válasz az MI-től

Nagy listák megjelenítéséhez a UITableView vagy UICollectionView használatos. Ezek az ismételt cellahasználat mintáját valósítják meg (Cell Reuse), amely hatékonyan kezeli a memória- és teljesítmény kérdéseket.

Fő lépések:

  1. UITableView vagy UICollectionView létrehozása: Helyezzen el egy példányt a megfelelő osztályból a képernyőn.

  2. DataSource és Delegate hozzárendelése: Állítsa be a vezérlőt vagy más objektumot dataSource-ként és delegate-ként.

    // Példa UITableView-re
    tableView.dataSource = self 
    tableView.delegate = self
    
    • A dataSource felelős az adatok szolgáltatásáért a listához (szekciók/sorok száma, cella tartalma).
    • A delegate kezeli a felhasználói interakciókkal kapcsolatos eseményeket (kiválasztás, swipe-ek stb.), valamint a megjelenés beállításait.
  3. Cellák regisztrálása: Regisztrálja a cella osztályokat (UITableViewCell vagy UICollectionViewCell) az újrahasználathoz. Használhat osztályokat vagy nib fájlokat.

    // Egyedi UITableViewCell osztály regisztrálása osztályból
    tableView.register(MyCustomCell.self, forCellReuseIdentifier: "MyCellIdentifier")
    
    // Egyedi UITableViewCell regisztrálása nib-ből
    tableView.register(UINib(nibName: "MyCustomCell", bundle: nil), forCellReuseIdentifier: "MyCellIdentifier")
    
  4. dataSource metódusok implementálása: Kötelező metódusok a UITableViewDataSource-hez:

    • numberOfSections(in:): A szekciók számát adja vissza.
    • tableView(_:numberOfRowsInSection:): A sorok számát adja vissza a szekcióban.
    • tableView(_:cellForRowAt:): Kulcsfontosságú a cellák újrahasználásához. Ebben a metódusban kérjük le a cellát a pool-ból.
    // `tableView(_:cellForRowAt:)` példája
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        // Cella lekérése a pool-ból
        guard let cell = tableView.dequeueReusableCell(withIdentifier: "MyCellIdentifier", for: indexPath) as? MyCustomCell else {
            fatalError("Nem sikerült lekérni a MyCustomCell-t") // Hibakezelés
        }
        
        // A cella tartalmának beállítása az adatok alapján
        let item = data[indexPath.row]
        cell.configure(with: item) // Cella konfigurációs metódus
        
        return cell
    }
    
  5. delegate metódusok implementálása (opcionális): Például a cella kiválasztásának kezelése:

    // A cella kiválasztásának kezelése
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let selectedItem = data[indexPath.row]
        // Művelet végrehajtása a kiválasztott elemmel
        print("Kiválasztott: \(selectedItem)")
    }
    

A cellák újrahasználatának alapelve:

Az iOS rendszer egy cella pool-t tart fenn, amelyeket már nem jelenít meg a képernyőn. Amikor új cellát kell megjeleníteni (pl. görgetéskor), nem hoz létre újat, hanem a már létező pool-ból használja fel. A dequeueReusableCell(withIdentifier:for:) metódus kér egy ilyen cellát. Ez jelentősen takarít meg memóriát és számítási erőforrásokat.

UICollectionView:

Hasonlóan működik, mint a UITableView, de nagyobb rugalmasságot kínál az elemek elrendezésében (rácsok, egyedi layoutok). A UICollectionViewDataSource és UICollectionViewDelegate implementációját igényli. A sorok és cellák helyett elemekkel (items) és szekciókkal dolgozik.

A UITableView vagy UICollectionView cellák újrahasználatával történő használata az iOS-ben a standard és leghatékonyabb módja a nagy listák megjelenítésének.