Sobes.tech
Junior

Чӣ тавр рӯйхати бо шумораи зиёди ҳуҷраҳо дар iOS амалӣ кардан мумкин аст?

sobes.tech AI

Ҷавоб аз AI

Барои намоиши рӯйхатҳои калон, истифода мешавад UITableView ё UICollectionView. Онҳо моделро иҷро мекунанд (Cell Reuse), ки имкон медиҳад мудирияти самараноки хотира ва иҷроиш.

Қадамҳои асосӣ:

  1. Эҷоди UITableView ё UICollectionView: Нусхаи синфи мувофиқро дар экран ҷойгир кунед.

  2. Моил кардани DataSource ва Delegate: Контролер ё объекти дигарро ҳамчун dataSource ва delegate таъин кунед.

    // Мисол барои UITableView
    tableView.dataSource = self 
    tableView.delegate = self
    
    • dataSource масъул аст барои таъмин намудани маълумот барои рӯйхат (шумораи сексияҳо/хатҳо, мундариҷаи ҳуҷраҳо).
    • delegate масъул аст барои идора кардани ҳодисаҳои вобаста ба ҳамкории корбар бо ҳуҷраҳо (интихоб, swipe ва ғайра), инчунин барои танзими намуди зоҳирӣ.
  3. Бақайдгирии ҳуҷраҳо: Классҳои ҳуҷраҳоро (UITableViewCell ё UICollectionViewCell) барои истифодаи такрорӣ бақайдгирӣ кунед. Мушаххасот ё nib-ҳо истифода бурда мешаванд.

    // Мисол барои бақайдгирии UITableViewCell махсус аз класс
    tableView.register(MyCustomCell.self, forCellReuseIdentifier: "MyCellIdentifier")
    
    // Мисол барои бақайдгирии UITableViewCell махсус аз nib
    tableView.register(UINib(nibName: "MyCustomCell", bundle: nil), forCellReuseIdentifier: "MyCellIdentifier")
    
  4. Иҷрои методҳои dataSource: Методи ҳатмӣ барои UITableViewDataSource:

    • numberOfSections(in:): Шумораи сексияҳоро бармегардонад.
    • tableView(_:numberOfRowsInSection:): Шумораи хатҳоро дар сексия бармегардонад.
    • tableView(_:cellForRowAt:): Методи калидӣ барои истифодаи такрорӣ. Дар ин метод ҳуҷра аз пул талаб карда мешавад.
    // Мисол барои иҷрои `tableView(_:cellForRowAt:)`
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        // Гирифтани ҳуҷра аз пул барои истифодаи такрорӣ
        guard let cell = tableView.dequeueReusableCell(withIdentifier: "MyCellIdentifier", for: indexPath) as? MyCustomCell else {
            fatalError("Намудани MyCustomCell") // Ҳал кардани хато
        }
        
        // Танзими мундариҷаи ҳуҷра дар асоси маълумот
        let item = data[indexPath.row]
        cell.configure(with: item) // Методи танзимоти ҳуҷра
        
        return cell
    }
    
  5. Иҷрои методҳои delegate (ихтиёрӣ): Масалан, барои коркарди пахш кардани ҳуҷра:

    // Масалан, барои коркарди интихоб кардани ҳуҷра
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let selectedItem = data[indexPath.row]
        // Иҷрои амал бо унсури интихобшуда
        print("Интихоб шуд: \(selectedItem)")
    }
    

Принсипи истифодаи такрории ҳуҷраҳо:

Система iOS пули ҳуҷраҳоро нигоҳ медорад, ки дигар дар экран намоён нестанд. Вақте ки ҳуҷраи нав нишон дода мешавад (масалан, дар ҳангоми ҳаракат), ба ҷои сохтани нав, система қаблӣ ҳуҷраро аз пул истифода мебарад. Методи dequeueReusableCell(withIdentifier:for:) чунин ҳуҷраро талаб мекунад. Ин ба хотир нигоҳ доштани хотира ва захираҳои ҳисоббарор хеле кӯмак мекунад.

UICollectionView:

Ҳамон тавр, ки UITableView, аммо бо бештар флексибилитет дар ҷойгиркунии элементҳо (шабакаҳо, layout-ҳои махсус). Талаб мекунад, ки UICollectionViewDataSource ва UICollectionViewDelegate иҷро шаванд. Ба ҷои хатҳо ва ҳуҷраҳо, бо элементҳо (items) ва сексияҳо кор мекунад.

Истифодаи UITableView ё UICollectionView бо истифодаи такрории ҳуҷраҳо — стандартӣ ва самараноктарин роҳи намоиши рӯйхатҳои калон дар iOS.