2011-02-11 8 views
21

Próbuję dostosować mój przycisk Wstecz w kontroler nawigacji drążenia w dół.navigationItem.backBarButtonItem nie działa? Dlaczego poprzednie menu wciąż wyświetla się jako przycisk?

Na moim jednym kontrolerze widoku Mam Dodaj przycisk gdzie kod programowo generuje nowy UIViewController:

- (void)add:(id)sender 
{ 
    MyAddViewController *addController = [[MyAddViewController alloc] initWithNibName:@"MyAddViewController" bundle:nil]; 

    [self.navigationController pushViewController:addController animated:YES]; 

    [addController release]; 
} 

to działa i kiedy klikam przycisk dodać Wiertła dół do nowego widoku. Wewnątrz metody MyAddViewController.mviewDidLoad mam:

self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease]; 

Ale to nie działa. Przycisk Wstecz w kontrolerze nawigacji pozostaje na kontrole poprzedniego widoku na stosie. Wygląda na to, że linia nic nie robi. Przegapiłem coś?

Dzięki

Odpowiedz

26

Będzie to działać tylko na każde dziecko po viewController który ma self.navigationItem.backBarButtonItem.

39

self.navigationItem.backBarButtonItem jest dla przycisku Wstecz, który pojawia się na widoku popchniętym przez kontroler widoku. Musisz więc przenieść tę linię do poprzedniego kontrolera widoku.

+0

W jaki sposób przypiszesz akcję, która ma zostać wykonana w widoku wypychanym, przed powrotem do poprzedniego kontrolera widoku. – mask

+1

O ile wiem, nie można tego zrobić za pomocą backBarButtonItem.Aby to zrobić, musisz zastąpić leftBarButtonItem i przypisać do niego akcję. – marimaf

+2

Ta odpowiedź uratowała mnie po wielu godzinach frustracji. – Tres

10

Dezorientujesz numery backBarButtonItem i leftBarButtonItem. Od UINavigationItem docs na backBarButtonItem:

Kiedy ta pozycja jest z powrotem element z navigation bar-kiedy jest następny poz poniżej górnego elementu-to może być reprezentowane jako przycisk z powrotem na nawigacji bar. Użyj tej właściwości, aby określić tylny przycisk. Wartość docelowa i ustawiona wartość parametru przycisku paska bocznego na tylną klapę powinna być zerowa. Domyślna wartość jest elementem przycisku paska wyświetlającym tytuł pozycji nawigacji.

Tak więc, jeśli były, aby zmienić:

self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease]; 

Do:

self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease]; 

wierzę, by uzyskać pożądany efekt.

+10

... z wyjątkiem tego, że nie jest to "prawidłowy przycisk" Wstecz ", to znaczy, że nie będzie on mieć kształtu strzałki. –

+0

tyvm +1 - Właśnie straciłem godzinę próbując przypisać do backBarButtonItem, gdy leftBarButtonItem było dokładnie tym, czego potrzebowałem! – kfmfe04

4

Nie można zastąpić backBarButtonItem, ale można użyć opcji leftBarButtonItem, aby ją zastąpić. Jednak, aby uzyskać nowy przycisk do wykonywania działać tak samo jak przycisk z powrotem, trzeba zrobić, aby ustawić cel i działanie nowego przycisku coś takiego:

- (void)dismissMyView { 
    [self.navigationController popViewControllerAnimated:YES]; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] 
     initWithTitle:@"Quit" style: UIBarButtonItemStyleBordered 
     target:self action:@selector(dismissMyView)]; 
} 
+4

Poza tym, że nie będzie wyglądać jak przycisk powrotu (przycisk w kształcie strzałki) – marimaf

0

Jeśli ViewController push ViewController B tymczasem chcemy ustawić na pasku tylnym, powinniśmy ustawić "self.navigationItem.backBarButtonItem = ..". Jeśli był ustawiony w ViewController B, to nie zadziała tak, jak chcemy.

Powiązane problemy