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:
-
Sukurti
UITableViewarbaUICollectionView: išdėstykite atitinkamo klasės pavyzdį ekrane. -
Priskirti DataSource ir Delegate: nustatykite valdiklį arba kitą objektą kaip
dataSourceirdelegate.// Pavyzdys `UITableView` tableView.dataSource = self tableView.delegate = selfdataSourceatsakingas už duomenų teikimą sąrašui (sekcijų/eilutės skaičius, langelių turinys).delegateatsakingas už įvykių apdorojimą, susijusį su naudotojo sąveika su langeliais (pasirinkimas, slinkimas ir kt.), taip pat išvaizdos nustatymą.
-
Registruoti langelius: registruokite langelių klases (
UITableViewCellarbaUICollectionViewCell) 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") -
dataSourcemetodų įgyvendinimas: būtiniejiUITableViewDataSourcemetodai: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 } -
delegatemetodų į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.