Wie zu verwenden tableView:editingStyleForRowAtIndexPath?
Habe ich eine sehr einfache Anwendung mit einem UITableViewController. Nach der BEARBEITUNG, ich bin versucht, schieben Sie eine Zeile in der position 0 ist der erste Abschnitt. Die neue Zeile sollte eine INSERT-editing-Stil, während die vorhandene Zeile sollte einen Stil LÖSCHEN.
Habe ich überschrieben, die folgenden 4 Methoden:
//Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (self.editing && section == 0) {
return2;
}
return 1;
}
- (UITableViewCellEditingStyle)tableView:(UITableView*)tableView
editingStyleForRowAtIndexPath:(NSIndexPath*)indexPath {
int section = indexPath.section;
int row = indexPath.row;
if (self.editing && section == 0 && row == 0) {
return UITableViewCellEditingStyleInsert;
}
return UITableViewCellEditingStyleDelete;
}
- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
[super setEditing:editing animated:animated];
NSIndexPath *ip = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView beginUpdates];
if (editing) {
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:ip]
withRowAnimation:UITableViewRowAnimationLeft];
} else {
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:ip]
withRowAnimation:UITableViewRowAnimationFade];
}
[self.tableView endUpdates];
}
//Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"ClientsControllerCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc ] initWithStyle:UITableViewCellStyleValue1reuseIdentifier:CellIdentifier] autorelease];
}
int section = indexPath.section;
int row = indexPath.row;
if (self.editing && section == 0 && row == 0) {
cell.textLabel.text = @"Add Me";
cell.detailTextLabel.text = @"Detail text";
} else {
cell.textLabel.text = @"Test me";
cell.detailTextLabel.text = @"Detail text";
}
return cell;
}
Aber sobald ich in den BEARBEITEN-Modus", die beide" Zellen am Ende mit einem Bearbeitungs-style von UITableViewCellEditingStyleInsert.
Wenn ich meine Logik, und fügen Sie die neue Zelle zu ENDE - dann ist es richtig, zieht die Zellen mit einer Formatvorlage LÖSCHEN und die neue Zelle zu bekommen ist, ein INSERT.
Entweder Weg, tableView:editingStyleForRowAtIndexPath wird 4-mal aufgerufen. In der Tat, wenn ich das einfügen neuer Zellen in der Sektion:0 Zeile:0, diese Methode wird aufgerufen, mit dem Abschnitt:Zeile 0:0, 0:1, 0:0, 0:0. Während, wenn ich, fügen Sie die neue Zelle in Abschnitt: Zeile:1, diese Methode wird aufgerufen, mit dem Abschnitt:Zeile 0:0, 0:1, 0:0, 0:1.
Was bin ich? Ich sollte in der Lage sein, eine Zeile einfügen und fangen Sie es richtig? Aus irgendeinem Grund, ich kann nicht finden Sie in Abschnitt=0 row=1 durch ein zweites mal.
-Luther
InformationsquelleAutor Luther Baker | 2009-12-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es eine weitere Frage auf StackOverflow, das erscheint, um zu Fragen, im wesentlichen die gleiche Sache: SO 1508066.
Antwort da behauptet, es ist flippig zu setzen, die Zeile Einfügen an der Spitze; es gehen sollte an der Unterseite statt. Ich bin mir nicht sicher, ich Stimme mit dieser Behauptung, aber es ist sicherlich der Weg des geringsten Widerstandes.
InformationsquelleAutor Dan Pichelman