2017-03-21 3 views
2

Kein Duplikat:
Die Frage/Antwort ist über die Änderung der Farbe. Ich habe kein Problem, die Farbe der Zelle zu ändern, eher habe ich ein Problem, wenn ich die "Farbe" .clear habe und eine Zelle einfüge, wird die Zelle "zurückgesetzt".Cell backgroundColor klar seltsames Verhalten beim Einfügen einer Zeile

Immer wenn ich die Hintergrundfarbe meiner Zelle auf .clear setze und ich eine Zeile in die Tabelle einfüge, wird die Zelle automatisch auf ihren ursprünglichen Zustand zurückgesetzt. Dies passiert nicht, wenn die Hintergrundfarbe einen Wert hat.

Zum Beispiel:

override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 
    super.init(style: style, reuseIdentifier: reuseIdentifier) 

    let gesture = UIPanGestureRecognizer() 
    gesture.addTarget(self, action: #selector(handlePan)) 
    gesture.delegate = self 

    addGestureRecognizer(gesture) 

    backgroundColor = .clear 
} 

func handlePan(_ recognizer: UIPanGestureRecognizer) { 
    if recognizer.state == .changed { 
     let translation = recognizer.translation(in: self).x 

     contentView.frame.origin.x += translation 

     recognizer.setTranslation(.zero, in: self) 
    } 

    if recognizer.state == .ended { 
     guard let index = delegate?.tableView.indexPath(for: self) else { return } 

     delegate?.insert(index) 
    } 
} 

Meine Viewcontroller:

func insert(_ index: IndexPath) { 
    let cell = tableView.cellForRow(at: index) as? PannableCell 

    items.append("some") 

    let path = IndexPath(row: index.row + 1, section: index.section) 

    tableView.insertRows(at: [path], with: .fade) 
} 

Frage:
Wie kann ich meine Hintergrundfarbe meiner Zelle zu .clear gesetzt und eine Zeile einfügen, ohne die Zelle zu sein zurücksetzen? Ich möchte das, denn nachdem ich die Zelle eingefügt habe, möchte ich die ursprüngliche Zelle wieder an ihre ursprüngliche Position animieren.

bearbeiten:
die Farbe backgroundColor Einstellung funktioniert nur in iOS 9. In iOS 10 noch die Zelle setzt irgendwie ..

+0

Mögliche Duplikate von [UITableViewCell zeigen weißen Hintergrund und können nicht auf iOS7 geändert werden] (http://stackoverflow.com/questions/18878258/uitableviewcell-show-white-background-and-cannot-be-modified-on-ios7) – kevin

+0

Danke für den tollen Link. Während es das Problem nicht behebt, wenn ich möchte, dass die Farbe ".clear" ist, tut es dies, wenn ich eine andere Farbe verwende (ich habe die Hintergrundfarbe meiner Tabelle als Temp-Fix verwendet). –

+0

Seltsamerweise, wenn ich die 'backgroundColor' in eine andere Farbe (zum Beispiel:' .gray') ändere, wird die Zelle immer noch zurückgesetzt (beim Einfügen einer neuen Zelle), bis die Zelle wiederverwendet wird. Die Antwort im Link kkoltzau zur Verfügung gestellt behoben dies (wenn die Farbe nicht '.clear' ist. –

Antwort

1

Änderung Ihrer Einlage dazu:

tableView.beginUpdates() 
tableView.insertRows(at: [path], with: .fade) 
tableView.endUpdates() 
+0

Danke, aber funktioniert nicht. –

1

Try Verwenden Sie beginUpdates() und endUpdates() auf Ihrem TableView.

tableView.beginUpdates() 
// insert, delete your rows here 
tableView.endUpdates() 

Wenn Sie nicht über diese Methoden verwenden Sie mit allen Arten von Fehlern einschließlich ungültige Zeilenanzahl kann am Ende, UI Pannen usw.

Wenn es hilft nicht, Sie zu „dirty fix“ versuchen können, es durch Einstellen der gewünschten Farbe in prepareForReuse Methode Ihrer Zelle oder in tableView:willDisplayCell:forRowAtIndexPath: Delegate-Methode (versuchen Sie, schmutzige Fixes wie folgt zu vermeiden).

+0

Danke, leider funktioniert es nicht. Irgendwie wenn die Farbe ".clear" ist und eine Zelle eingefügt wird, wird es immer passieren, auch wenn die Farbe in 'willDisplayCell' eingestellt ist. –

+0

@HennyLee kannst du das Projekt irgendwo hochladen? schwer zu sagen, ohne den eigentlichen Code zu sehen –

+0

Leider kann ich Tut mir leid, das Projekt gehört mir nicht, aber der Code sollte das reproduzieren können. –

Verwandte Themen