2010-02-24 14 views

Odpowiedz

17

Zmagałem się z kilkoma podejściami na ten temat i ostatecznie wymyśliłem to, używając wszystkich odpowiedzi z kilku źródeł. Jest kilka sztuczek; Ten fragment będzie to wszystko pokazać (I było stworzenie niestandardowego rightNavButton, ale można dostosować to łatwe dla każdego UIBarButtonItem):

// Produces a nice "right arrow" style button that mirrors the back arrow 
// automatically added by the navController 
// 
UIImage *buttonImage = [UIImage imageNamed:@"forwardButton.png"]; 
UIButton *forwardButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[forwardButton setBackgroundImage:buttonImage forState:UIControlStateNormal]; 
[forwardButton setTitle:@"Meter" forState:UIControlStateNormal]; 
forwardButton.font = [UIFont boldSystemFontOfSize:12]; 
forwardButton.frame = CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height); 
[forwardButton addTarget:self action:@selector(showMeter) 
      forControlEvents:UIControlEventTouchUpInside]; 

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] 
      initWithCustomView:forwardButton]; 

Uwaga: Okazuje się, że jeśli spróbujesz ustawić cel i działanie bezpośrednio na pozycja przycisku po przypisaniu niestandardowego widoku przy użyciu UIButton, którego nie będzie trzeba - musisz ustawić cel i akcję na samym przycisku - najwyraźniej navBar używa dosłownego przycisku podanego.

To jest obraz używałem na nieprzezroczystym czarnym navBar (można użyć czegokolwiek, oczywiście): http://raretiger.com/images/forwardbutton.png

+3

Możesz pobrać, przezroczyste obrazy kompatybilne z Retina tutaj: [link] http://handleopenurl.com/assets/docs/arrow-buttons.zip [/ link] Strzałka wsteczna ma lewy wierzchołek z 15, przód z 5 (przy przyciskach o normalnym rozmiarze). –

+2

Masz przeciek pamięci, w którym przydzielasz 'UIBarButtonItem' 'zachować +1', a następnie przypisujesz go do właściwości' rightBarButtonItem' 'zachowując +1'. Co oznacza, że ​​UIBarButtonItem ma teraz wartość zatrzymania 2 i nigdy nie zostanie zwolniony. Musisz autorelease UIBarButtonItem: 'self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView: forwardButton] autorelease];' – Camsoft

+1

zlikwidowano łącza graficzne – Esqarrouth

4

Można by utworzyć UIImageView lub UIButton z wymaganym obrazie następnie użyć:

[[UIBarButtonItem alloc] initWithCustomView: arrowButton]; 

nadzieję, że to pomaga.

7

Utwórz niestandardowe tło. Aby uzyskać więcej informacji, zobacz Creating a left-arrow button (like UINavigationBar's "back" style) on a UIToolbar.


może -pushNavigationItem:animated: wykonywanie wbudowany przycisk z powrotem pojawi się, chociaż nie można przypisać akcje niestandardowe do niego.


Dla nielegalnych metod, można użyć

UIButton* backButton = [UIButton buttonWithType:101]; 

stworzyć wstecz ""

+0

Jaki jest numer kodu dla docelowego przycisku wskazującego? – ma11hew28

+0

@Matt: To nie jest wbudowany typ przycisku. – kennytm

+5

Quick hack, nieco za późno: przycisk forward jest przyciskiem wstecz z transformacją = skala (-1,1), a textLabel ma transformację = skala (-1,1). – Cyrille

0

Kontynuując ideę @Plamen Dragozov za: Zauważyłem jeśli pozostawić uibutton jak jest, to wyzwoliłby regulację obrazu po dotknięciu i jest odwrotnie niż normalny przycisk powrotu do tyłu. To, co zrobiłem, to odznaczenie "highlighted adjusts image" i działa jak urok.

mam nadzieję, że pomoże to początkującym, takim jak ja.

0

bardziej eleganckie rozwiązanie:

UIBarButtonItem * backButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Title" style:UIBarButtonItemStylePlain target:self action:@selector(back:)]; 
[backButtonItem setBackgroundImage:[UIImage imageNamed:@"back.png"]  forState:UIControlStateNormal  barMetrics:UIBarMetricsDefault]; 
self.navigationItem.leftBarButtonItem = backButtonItem; 
0

Moim problemem była zmiana nazwy przycisk wstecz, który pojawia się na popychane kontrolera widoku. Znalazłem brudne rozwiązanie i jeśli zignorujesz nieidealny problem z animacją, otrzymasz przycisk powrotu z żądanym tytułem.

Sztuką jest, aby zmienić tytuł pierwszego VC w viewWillDisappear i ponownie ustawić go oczywiście w viewWillAppear

(Nie trzeba dodawać, domyślnie, jeśli nie ma leftBarButtonItem zestaw, UINavigationController pokaże plecy przycisk tytuł VC, które popychane bieżącego VC)

w VC gdzie pchnąć swoją aktualną VC, czy

-(void) viewWillDisappear:(BOOL) animated { 
    [super viewWillDisappear:animated]; 
    self.title = @"Back"; 
} 

-(void) viewWillAppear:(BOOL) animated { 
    [super viewWillAppear:animated]; 
    self.title = @"Original Title"; 
}