Sobes.tech
Junior

Kaip įgyvendinti sąrašą su daug langelių iOS?

sobes.tech AI

Atsakymas iš AI

Didelių sąrašų rodymui naudojami UITableView arba UICollectionView. Jie įgyvendina pakartotinio naudojimo langelių (Cell Reuse) modelį, kuris leidžia efektyviai valdyti atmintį ir našumą.

Pagrindiniai žingsniai:

  1. Sukurti UITableView arba UICollectionView: išdėstykite atitinkamo klasės pavyzdį ekrane.

  2. Priskirti DataSource ir Delegate: nustatykite valdiklį arba kitą objektą kaip dataSource ir delegate.

    // Pavyzdys `UITableView`
    tableView.dataSource = self 
    tableView.delegate = self
    
    • dataSource atsakingas už duomenų teikimą sąrašui (sekcijų/eilutės skaičius, langelių turinys).
    • delegate atsakingas už įvykių apdorojimą, susijusį su naudotojo sąveika su langeliais (pasirinkimas, slinkimas ir kt.), taip pat išvaizdos nustatymą.
  3. Registruoti langelius: registruokite langelių klases (UITableViewCell arba UICollectionViewCell) pakartotiniam naudojimui. Galite naudoti klases arba nib failus.

    // Pavyzdys registruojant `UITableViewCell` iš klasės
    tableView.register(MyCustomCell.self, forCellReuseIdentifier: "MyCellIdentifier")
    
    // Registracija iš nib
    tableView.register(UINib(nibName: "MyCustomCell", bundle: nil), forCellReuseIdentifier: "MyCellIdentifier")
    
  4. dataSource metodų įgyvendinimas: būtinieji UITableViewDataSource metodai:

    • numberOfSections(in:): grąžina sekcijų skaičių.
    • tableView(_:numberOfRowsInSection:): grąžina eilučių skaičių sekcijoje.
    • tableView(_:cellForRowAt:): pagrindinis pakartotinio naudojimo metodas. Čia gaunamas langelis iš pulko.
    // `tableView(_:cellForRowAt:)` įgyvendinimo pavyzdys
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        // Langelio gavimas iš pulko
        guard let cell = tableView.dequeueReusableCell(withIdentifier: "MyCellIdentifier", for: indexPath) as? MyCustomCell else {
            fatalError("Nepavyko išpulinti MyCustomCell") // klaidos apdorojimas
        }
        
        // Turinio nustatymas pagal duomenis
        let item = data[indexPath.row] // duomenų masyvas
        cell.configure(with: item) // langelio konfigūravimo metodas
        
        return cell
    }
    
  5. delegate metodų įgyvendinimas (pasirinktinai): pavyzdžiui, langelio paspaudimo apdorojimas:

    // Pavyzdys, kaip apdoroti langelio pasirinkimą
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let selectedItem = data[indexPath.row]
        // Veiksmo atlikimas su pasirinktu elementu
        print("Pasirinktas: \(selectedItem)")
    }
    

Langelių pakartotinio naudojimo principas:

iOS sistema palaiko langelių pulą, kurie daugiau nėra rodomi ekrane. Kai reikia parodyti naują langelį (pvz., slinkimo metu), sistema naudoja anksčiau sukurtą langelį iš šio pulko. dequeueReusableCell(withIdentifier:for:) metodas prašo tokio langelio. Tai žymiai taupo atmintį ir skaičiavimo išteklius.

UICollectionView:

Veikia panašiai kaip UITableView, bet suteikia didesnį lankstumą elementų išdėstyme (tinklai, pritaikyti maketai). Reikalauja UICollectionViewDataSource ir UICollectionViewDelegate įgyvendinimo. Vietoje eilučių ir langelių, veikia elementais (items) ir sekcijomis.

Naudojant UITableView arba UICollectionView su langelių pakartotiniu naudojimu, yra standartinis ir efektyviausias būdas rodyti didelius sąrašus iOS.