ios - स्क्रॉल करते समय UITableView चेकमार्क गायब हो जाते हैं




swift checkmark (4)

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) ->    UITableViewCell{
var cell : UITableViewCell = .........
if(boolArray[indexPath.row){
    cell.accessoryType = UITableViewCellAccessoryType.Checkmark
} else {
    cell.accessoryType = UITableViewCellAccessoryType.None
}
}

इस कोड को आज़माएं

मुझे एक तालिका दृश्य पर चेकमार्क बनाना पड़ता है, लेकिन अगर मैं स्क्रॉल कर रहा हूं और एक चिह्नित सेल चिह्नित नहीं है और मैं चेकमार्क गायब होने पर वापस स्क्रॉल करता हूं।

इस कोड को चलते समय

var boolArray = [Bool]()

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)      {




        var cell:UITableViewCell = tableView.cellForRowAtIndexPath(indexPath)!


        if cell.accessoryType == UITableViewCellAccessoryType.Checkmark {

            cell.accessoryType = UITableViewCellAccessoryType.None

            boolArray[indexPath.row] = false


        }
        else
        {

            cell.accessoryType = UITableViewCellAccessoryType.Checkmark

            boolArray[indexPath.row] = true

        }

    println(boolArray)


}
 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) ->    UITableViewCell
{
    boolArray.append(false)
        var view = UITableViewCell(style: UITableViewCellStyle.Default,    reuseIdentifier: "CellTable")


        return view

}

थोड़ा सा स्क्रॉलिंग और चेकमार्किंग के बाद, मुद्रित सरणी यह ​​बड़ी है ...

झूठे, झूठे, झूठे, झूठे, झूठे, झूठे, झूठे, झूठे, झूठे, झूठे, झूठे, झूठे, झूठे, झूठे, झूठे, झूठे, झूठे, झूठे, गलत, सच्चे, सच्चे, झूठे, झूठे, गलत]


 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) ->    UITableViewCell

कोड के रूप में आप देख सकते हैं के रूप में कोशिकाओं reuses आपको अपने चयनित कक्षों की स्थिति को रखने की जरूरत है, और var view = UITableViewCell ... बाद गौण दृश्यों को असाइन करें var view = UITableViewCell ...


पंक्ति और अनुभाग मूल्यों को स्टोर करने के लिए ट्यूप्ले का एक सरणी बनाएँ:

var selectedCells:[(row: Int, section: Int)] = []

अपने cellForRowAtIndexPath , जांचें कि क्या आपके पास कोई selectedCellValues cellForRowAtIndexPath यदि ऐसा है, तो उस सेल के लिए एक accessoryType जोड़ें और लूप से बाहर निकलना,

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{

    let cell = tableView.dequeueReusableCellWithIdentifier("SettingsCell", forIndexPath: indexPath) as SettingsCustomCell

    var rowNums:NSNumber = indexPath.row
    var sectionNums:NSNumber = indexPath.section

    var selectedRow:Int
    var selectedSection:Int

    if(selectedCells.count > 0){
        for tuple in selectedCells{

            selectedRow = tuple.row
            selectedSection = tuple.section

            if(selectedRow == rowNums && selectedSection == sectionNums){
                cell.accessoryType = UITableViewCellAccessoryType.Checkmark
                break
            }else{
                cell.accessoryType = UITableViewCellAccessoryType.None
            }
        }
    }else{
        cell.accessoryType = UITableViewCellAccessoryType.None
    }

    var keyValue = listOfSectionTitles[indexPath.section]
    var items: [NSString] = dictionaryOfCellTitles.objectForKey(keyValue) as [NSString]

    cell.textLabel?.text = items[indexPath.row]
    return cell
}

didSelecteRowAtIndexPath में selectedcellvalues didSelecteRowAtIndexPath को didSelecteRowAtIndexPath :

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    let cell = tableView.cellForRowAtIndexPath(indexPath)

    if(cell?.accessoryType == UITableViewCellAccessoryType.None){
        cell?.accessoryType = UITableViewCellAccessoryType.Checkmark
        selectedCells.append(row:indexPath.row, section:indexPath.section)
    }else{
        var rowToDelete = indexPath.row
        var sectionToDelete = indexPath.section

        for var i=0; i < selectedCells.count; i++
        {
            if(rowToDelete == selectedCells[i].row && sectionToDelete == selectedCells[i].section){
                selectedCells.removeAtIndex(i)
                cell?.accessoryType = UITableViewCellAccessoryType.None
            }
        }
    }
    tableView.deselectRowAtIndexPath(indexPath, animated: true)
}

एक NSMutableIndexSet चयन स्थिति को ट्रैक करने के लिए उपयोग करने के लिए एक बेहतर ऑब्जेक्ट है।

जब आप एक इंडेक्सपैथ के लिए सेल लौटाते हैं तो आपको चयन स्थिति की जांच भी करनी होगी

var selectedCells = NSMutableIndexSet()

func tableView(_ tableView: UITableView, didSelectRowAtIndexPath indexPath: IndexPath)      {

    var accessory=UITableViewCellAccessoryType.none

    if (selectedCells.containsIndex(indexPath.row) {
       selectedCells.removeIndex(indexPath.row)
    }
    else {
       selectedCells.addIndex(indexPath.row)
       accessory=.checkmark
    }

    if let cell = tableView.cellForRowAtIndexPath(indexPath) {

        cell.accessoryType = accessory
    }

}

func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: IndexPath) ->    UITableViewCell
{
    var cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier:"CellTable")

     var accessory=UITableViewCellAccessoryType.none

     if (selectedCells.containsIndex(indexPath.row) {
         accessory = .checkmark
     }

     view.accessoryType=accessory

        return view
}




checkmark