Hvordan bruke Tableview: editingStyleForRowAtIndexPath?

stemmer
1

Jeg har en veldig enkel applikasjon med en UITableViewController. Ved redigering, jeg prøver å skyve en rad i posisjon 0 i den første delen. Den nye raden bør ha en insettingsredigering stil mens den eksisterende rad bør ha en DELETE stil.

Jeg har overstyrt følgende 4 måter:


// 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;
}

Men så snart jeg går inn i redigeringsmodus, begge celler ende opp med en redigering stil UITableViewCellEditingStyleInsert.

Hvis jeg endrer min logikk og legge den nye cellen til slutt - så det trekker riktig cellene med en DELETE stil og den nye cellen få er en INSERT.

Uansett, Tableview: blir editingStyleForRowAtIndexPath påberopt 4 ganger. Faktisk, hvis jeg setter inn den nye cellen i seksjon: 0 rad: 0, blir denne metoden kalles med Seksjon: Rad 0: 0, 0: 1, 0: 0, 0: 0. Mens hvis jeg føyer den nye cellen i seksjon: p: 1, blir denne metoden kalles med Seksjon: Rad 0: 0, 0: 1, 0: 0, 0: 1.

Hva er det jeg mangler? Jeg burde være i stand til å sette inn en rad og fange det riktig? For noen grunn, kan jeg ikke se avsnitt = 0 p = 1 kommer gjennom en gang til.

-Luther

Publisert på 30/12/2009 klokken 00:17
kilden bruker
På andre språk...                            


1 svar

stemmer
1

Det er et annet spørsmål på Stackoverflow som ser ut til å spørre i hovedsak de samme: SO 1.508.066 .

Svaret er det hevder at det er ikke-standard å sette inn rad på toppen; det skal gå på bunnen i stedet. Jeg vet ikke om jeg er enig med at påstanden, men det er absolutt den minste motstands vei.

Svarte 06/01/2010 kl. 19:08
kilden bruker

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