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

Schreibe einen Kommentar