कोई फर्क नहीं पड़ता कि मैं क्या करता हूं मैं स्क्रॉलिंग के बाद चयनित चेकमार्क आइटम नहीं रख सकता। मुझे पता है कि इसका इस तथ्य से कोई लेना-देना नहीं है कि जब आइटम दिखाई देते हैं तो कोशिकाओं का पुन: उपयोग किया जाता है लेकिन मुझे यकीन नहीं है कि इसे कैसे संभालना है।

निम्नलिखित कोड पहले लोड पर चयनित सही आइटम को सफलतापूर्वक दिखाता है, मुद्दा यह है कि एक बार जब मैं स्क्रॉल करना शुरू करता हूं तो यह बेतरतीब ढंग से अन्य वस्तुओं का चयन करता रहता है।

स्क्रॉल करने के बाद चयनित आइटम को रखने और अवांछित वस्तुओं/पंक्तियों को चुनने से रोकने का उचित तरीका क्या है?

class CategoriesViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 
    var categories: Results<Category>! // I'm getting this from the Realm data base 
    var categoryTracker:Category? // I'm getting this from other view controler
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return categories.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "categoriesCell", for: indexPath) as! CategoriesCell
        
        let categoryList = categories[indexPath.row]
        cell.labelCategoryName.text = categoryList.categoryName

        if categories[indexPath.row].categoryID == self.categoryTracker!.categoryID{
            cell.accessoryType = .checkmark
        }
        
        return cell
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        
        // show checkmark on category for selected item and uncheck the rest
        for row in 0..<tableView.numberOfRows(inSection: indexPath.section) {
            if let cell = tableView.cellForRow(at: IndexPath(row: row, section: indexPath.section)) {
                cell.accessoryType = row == indexPath.row ? .checkmark : .none
            }
        }
    }
}

इमेजिस:

enter image description here

1
fs_tigre 9 सितंबर 2020, 22:22

1 उत्तर

सबसे बढ़िया उत्तर

आप ठीक कह रहे हैं। ऐसा इसलिए होता है क्योंकि जब .चेकमार्क वाले सेल का पुन: उपयोग किया जाता है, तो वह अपने सहायक प्रकार को वापस .none पर रीसेट नहीं कर रहा होता है

आपको अपना अपडेट करना चाहिए:

if categories[indexPath.row].categoryID == self.categoryTracker!.categoryID{
    cell.accessoryType = .checkmark
}

प्रति:

if categories[indexPath.row].categoryID == self.categoryTracker!.categoryID {
    cell.accessoryType = .checkmark
} else {
    cell.accessoryType = .none
}
2
Daniel E. Salinas 9 सितंबर 2020, 22:29