2012-03-26 22 views
8

Używam xcode 4.2 z storyboardem do tworzenia aplikacji na iPhone'a.Dodaj komórkę do dolnej części UITableView w iOS

Po naciśnięciu przycisku edycji w prawym górnym rogu chciałbym mieć możliwość usunięcia istniejących wierszy i zobaczenia dodatkowej komórki (z zieloną ikoną "+") u góry, co pozwoliłoby mi dodać nowa komórka.

Mam tablicę, która jest wypełniana w metodzie viewDidLoad wykorzystaniem CoreData

mam włączony przycisk Ustawienia

self.navigationItem.rightBarButtonItem = self.editButtonItem; 

i wdrożył metodę

- (void)tableView:(UITableView *)tableView commitEditingStyle: 
      (UITableViewCellEditingStyle)editingStyle forRowAtIndexPath: 
        (NSIndexPath *)indexPath 
{ 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     // removing a cell from my array and db here... 
    } 
    else if (editingStyle == UITableViewCellEditingStyleInsert) { 
     // adding a cell to my array and db here... 
    } 
} 

Zdaję sobie sprawę, muszę aby dodać komórkę w pewnym momencie, który mogę następnie edytować, ale nie jest dla mnie jasne, gdzie i nie jestem w stanie znaleźć wyjaśnienia w Internecie.

Odpowiedz

18

Ok, podstawowa idea polega na tym, że po kliknięciu przycisku edycji pokażemy kontrolki usuwania obok każdego wiersza i dodamy nowy wiersz za pomocą kontrolki dodawania, aby użytkownicy mogli je kliknąć, aby dodać wpis prawym ? Po pierwsze, ponieważ masz już ustawiony przycisk edycji, pozwólmy naszemu stołowi, że w trybie edycji powinniśmy pokazać dodatkowy wiersz. Robimy to w naszym tableView:numberOfRowsInSection:

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return self.editing ? a_recs.count + 1 : a_recs.count; 
} 

a_recs tutaj jest tablica mam ustawić, aby przechowywać nasze rekordy więc musisz przełączać się, że z własnej tablicy. Następna w kolejce możemy powiedzieć naszym tableView:cellForRowAtIndexPath: co zrobić z dodatkową rzędu:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSString *CellIdentifier = @"Cell"; 
    BOOL b_addCell = (indexPath.row == a_recs.count); 
    if (b_addCell) // set identifier for add row 
     CellIdentifier = @"AddCell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
     if (!b_addCell) { 
      cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
     } 
    } 

    if (b_addCell) 
     cell.textLabel.text = @"Add ..."; 
    else 
     cell.textLabel.text = [a_recs objectAtIndex:indexPath.row]; 

    return cell; 
} 

Chcemy również polecić naszą tabelę, która do tego dodać rzędzie chcemy ikonę Add:

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (indexPath.row == a_recs.count) 
     return UITableViewCellEditingStyleInsert; 
    else 
     return UITableViewCellEditingStyleDelete; 
} 

masła. Teraz super tajny kung fu sos który trzyma to wszystko razem z pałeczkami:

-(void)setEditing:(BOOL)editing animated:(BOOL)animated { 
    [super setEditing:editing animated:animated]; 
    [self.tableView setEditing:editing animated:animated]; 
    if(editing) { 
     [self.tableView beginUpdates]; 
     [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:a_recs.count inSection:0]] withRowAnimation:UITableViewRowAnimationLeft]; 
     [self.tableView endUpdates];   
    } else { 
     [self.tableView beginUpdates]; 
     [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:a_recs.count inSection:0]] withRowAnimation:UITableViewRowAnimationLeft]; 
     [self.tableView endUpdates]; 
     // place here anything else to do when the done button is clicked 

    } 
} 

Powodzenia i smacznego!

+0

:) =) bez problemu! – ragamufin

+0

Korzystając z tej metody, zauważam, że wstawiany wiersz, który dodajemy i usuwamy, pokazuje niebieską ikonę wyboru po prawej stronie przez krótki moment podczas jej usuwania. Ma to związek z usunięciem stołu z trybu edycji przed usunięciem wiersza. Próbowałem przenieść wywołanie 'beginUpdates' powyżej wywołania tableView' setEditing', ale wtedy niebieska ikona pojawia się po dodaniu wiersza, zamiast go usunąć. Jakieś pomysły, jak uniknąć tej niebieskiej ikony wyboru? – Ryan

+0

Wygląda na to, że element accessoryType jest ustawiany gdzieś lub buforowany w kolejce tableView. Spróbuj go jawnie ustawić na UITableViewCellAccessoryNone podczas dodawania komórki. – ragamufin

4

This tutorial jest wart odczytu i powinien ci pomóc. To pokazuje, jak skonfigurować połączenie „Dodaj nowy wiersz” UITableView wiersz u dołu UITableView, ale powinieneś być w stanie dokonać tego pojawiają się na górze UITableView ciągu swojej realizacji:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

przykład

if(self.editing && indexPath.row == 1) 
{ 
    cell.text = @"Insert new row"; 
    ... 

Mam nadzieję, że to pomoże!

Powiązane problemy