Wie verwenden Tableview: editingStyleForRowAtIndexPath?

stimmen
1

Ich habe eine sehr einfache Anwendung mit einem UITableViewController. Nach EDITING, versuche ich eine Zeile in der richtigen Position zu schieben 0 des ersten Abschnitts. Die neue Zeile sollte eine INSERT IGNORE Bearbeitungsstil, während die bestehende Reihe einen DELETE-Stil haben sollte.

Ich habe die folgenden vier Methoden außer Kraft gesetzt:


// 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 der EDIT-Modus gehen, „beide“ Zellen mit einem Bearbeitungsstil von UITableViewCellEditingStyleInsert enden.

Wenn ich meine Logik ändern und die neue Zelle an den END anhängen - dann zieht es richtig, die Zellen mit einem DELETE-Stil und die neue Zelle get ist ein INSERT IGNORE.

So oder so, Tableview: editingStyleForRowAtIndexPath wird 4-mal aufgerufen. In der Tat, wenn ich die neue Zelle in dem Abschnitt einzufügen: Zeile 0: 0, 0: 1, 0: 0, 0: 0 wird mit 0 Abschnitt genannt, wobei dieses Verfahren: 0 Zeile. Während, wenn ich die neue Zelle in Abschnitt anhänge: Reihe: 1, wird diese Methode mit Abschnitt genannt: Zeile 0: 0, 0: 1, 0: 0, 0: 1.

Was vermisse ich? Ich soll eine Zeile einzufügen Lage sein, und es richtig zu fangen? Aus irgendeinem Grund kann ich nicht section = 0 row = 1 kommen durch ein zweites Mal sehen.

-Luther

Veröffentlicht am 30/12/2009 um 03:17
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
1

Es ist eine andere Frage auf Stackoverflow, der im Wesentlichen die gleiche Sache zu fragen scheint: SO 1.508.066 .

Die Antwort gibt behauptet, dass es Nicht-Standard die Zeilen einfügen an der Spitze zu setzen; es sollte stattdessen am Boden gehen. Ich bin mir nicht sicher, ob ich mit dieser Behauptung zustimmen, aber es ist sicherlich der Weg des geringsten Widerstandes.

Beantwortet am 06/01/2010 um 22:08
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more