2016-05-15 5 views
0

Ich habe UITableView, die ich als ein gleitendes Menü als Teil von SWRevealViewController verwenden.UITableView: Markieren Sie die letzte Zelle, aber andere Zellen werden auch markiert

Ich möchte die letzte Zelle in UITableView auszuwählen und zu implementieren die folgenden:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let customCell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! IGAWindAloftMenuTableViewCell 

    ... 


    let sectionsAmount = tableView.numberOfSections 
    let rowsAmount = tableView.numberOfRowsInSection(indexPath.section) 

    if (indexPath.section == sectionsAmount - 1 && indexPath.row == rowsAmount - 1) 
    { 
     customCell.backgroundColor = UIColor.yellowColor() 
    } 

    return customCell 
} 

Wenn ich den ganzen Weg hinunter scrollen, es funktioniert - die letzte Zelle markiert ist. Beim Scrollen nach oben und unten werden jedoch auch andere Zellen in der Mitte des Tisches hervorgehoben.

Gibt es eine Möglichkeit, dies zu verhindern?

Vielen Dank!

Antwort

3

Sie haben die Änderung des if -Zweig für alle anderen Zellen rückgängig zu machen:

if (indexPath.section == sectionsAmount - 1 && indexPath.row == rowsAmount - 1) { 
    customCell.backgroundColor = UIColor.yellowColor() 
} else { 
    customCell.backgroundColor = UIColor.whiteColor() // or whatever color 
} 

Der Grund für die Wirkung unerwünschter Seite ist die Wiederverwendung von Zellen. Eine Zelle wird erstellt, dann wird sie als letzte Zelle verwendet, dann bewegt sie sich außerhalb des Bildschirms und wird woanders wiederverwendet. Es enthält immer noch die geänderten Farbinformationen, befindet sich aber nicht mehr an der entsprechenden Position.

+0

Vielen Dank! Das hat gut funktioniert. Prost. –

Verwandte Themen