2013-11-22 13 views
5

Mam widok tabeli w mojej aplikacji, która pokazuje niektóre elementy. po kliknięciu na jeden element pojawia się nowy widok tabeli (z kontrolerem nawigacyjnym: push). W górnej części widoku tabeli znajduje się teraz kontroler nawigacji z automatyczną strzałką "wstecz", aby wrócić. Mam przycisk "edit" włączony po prawej stronie.iPhone - Dodaj przycisk "Dodaj", gdy przycisk Edytuj jest wybrany w widoku UITableView

Teraz, kiedy chcę dotknąć przycisku edycji, przycisk Wstecz powinien zniknąć, a zamiast przycisku Wstecz powinien być przycisk dodawania "+". czy to możliwe? Czy można jednocześnie nacisnąć przycisk Edytuj i Dodaj na ekranie?

dziękuję

Odpowiedz

7

To dość łatwe. Zastąp metodę setEditing:animated: kontrolera widoku. Jest to wywoływane, gdy przycisk Edytuj/Gotowe jest przełączany (zakładając, że używasz standardu editButtonItem z UIViewController).

W tej metodzie należy utworzyć przycisk "dodaj" i ustawić go jako element lewego przycisku paska. Spowoduje to ukrycie przycisku Wstecz. Usuń przycisk "Dodaj" i ponownie pojawi się przycisk Wstecz.

- (void)setEditing:(BOOL)editing animated:(BOOL)animated { 
    [super setEditing:editing animated:animated]; 

    if (editing) { 
     // Add the + button 
     UIBarButtonItem *addBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addAction:)]; 
     self.navigationItem.leftBarButtonItem = addBtn; 
    } else { 
     // remove the + button 
     self.navigationItem.leftBarButtonItem = nil; 
    } 
} 
+0

działa bez zarzutu! Dziękuję Ci! –

0

Przycisk strzałki wstecz to przycisk kontrolera nawigacji. Więc jeśli chcesz zniknąć ten sam przycisk, potem trzeba napisać ten kod poniżej: -

self.navigationItem.hidesBackButton=YES; 

Teraz, jeśli chcesz dodać niestandardowy przycisk na kontrolerze nawigacji następnie skorzystać z poniższego kodu: -

UIBarButtonItem *customButton = 
[[UIBarButtonItem alloc] 
          initWithTitle:@"Add"            

    style:UIBarButtonItemStyleBordered 
          target:self 
          action:@selector(yourMethod:)]; 
self.navigationItem.rightBarButtonItem = customButton; 
0

Można programowo ukryć przycisk wstecz, gdy widok tabeli zaczyna edycji, a następnie dodać przycisk „Dodaj”, aby po lewej stronie paska nawigacyjnego.

[self.navigationItem setHidesBackButton:YES]; 

UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addButtonPressed)]; 
[self.navigationItem setLeftBarButtonItem:addButton]; 

Następnie, gdy użytkownik naciśnie klawisz Gotowe zastąpić przycisk „Dodaj”, za pomocą przycisku Wstecz:

[self.navigationItem setHidesBackButton:NO]; 

self.navigationItem.leftBarButtonItem = self.navigationItem.backBarButtonItem; 
+0

Jak utworzyć metodę akcji dla przycisku edycji? –

+0

Nie resetuj 'leftBarButtonItem' z' backBarButtonItem'. Po prostu ustaw 'leftBarButtonItem' na' nil'. I nie ma potrzeby, aby ukryć przycisk Wstecz. – rmaddy

+0

@ user2710855 Jest wbudowany. Zobacz moją odpowiedź. – rmaddy

2

Tak, jest to podejście, które użyłem:

Masz nieruchomość zarówno dla przycisku Wstecz i przycisk Dodaj, a następnie ustawić go w viewDidLoad:

self.backButton = self.navigationItem.leftBarButtonItem; 
self.addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addPressed:)]; 

teraz trzeba tylko sw przyciski i zaktualizować stan TableView odpowiednio po naciśnięciu "Edit". Tutaj również zmieniam przycisk "Edytuj" na "Gotowe":

- (IBAction)editBarButtonPressed:(UIBarButtonItem *)sender { 
    if (self.tableView.editing == NO) { 
     UIBarButtonItem *myButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(editBarButtonPressed:)]; 

     self.navigationItem.rightBarButtonItem = myButton; 
     [self.tableView setEditing:YES animated:YES]; 

     [self.navigationItem setLeftBarButtonItem:self.addButton animated:YES]; 
    } else { 
     UIBarButtonItem *myButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(editBarButtonPressed:)]; 

     self.navigationItem.rightBarButtonItem = myButton; 
     [self.tableView setEditing:NO animated:YES]; 

     [self.navigationItem setLeftBarButtonItem:self.backButton animated:NO]; 
    } 
} 

Mam nadzieję, że to odpowie na twoje pytanie. :) br denrase

+1

Robisz to na własnej skórze. Użyj standardowego 'UIViewController editButtonItem' dla przycisku Edit/Done i standardowej metody' setEditing: animated: '. – rmaddy

+0

Masz rację, to jest łatwiejsze. :) – denrase

+0

Zgadzam się z @rmaddy; Nie jestem pewien, dlaczego chcesz zrobić bardziej skomplikowany krok. – Blaszard

Powiązane problemy