2009-09-12 8 views
15

Próbowałem tego podejścia/Hack: http://blog.blackwhale.at/2009/06/uibuttons-in-uinavigationbar/Jak dodać więcej niż jeden przycisk UIBarButton na UINavigationItem.rightBarButtonItem (lub leftBarButtonItem)?

Problemem jest to pozostawia delikatny szew. Próbowałem ustawić obraz tła zagnieżdżonego paska narzędzi na obraz, który uchwyciłem, jaki powinien być. To nie zadziałało. Obraz nie został zastosowany. Próbowałem również używać zagnieżdżonego paska UINavigationBar, który nie działał.

Widziałem to w kilku aplikacjach na iPhone'a. Czy ktoś wie jak?

[EDIT] Chcę, aby przyciski wyglądały jak normalne UIBarButtonItems i były w stanie używać stylów systemowych, takich jak UIBarButtonSystemItemAdd, UIBarButtonSystemItemRefresh. Podany link to robi, ale widać słabe szwy, ponieważ jest to UIToolbar zagnieżdżony na pasku nawigacji.

Proszę nie wspominać o tym łamaniu Wytycznych dla interfejsu ludzkiego. (Wiemy).

Doceniam, że wnosząc swoje hacki ... to jedyny sposób, aby to zrobić!

+0

Link wspomniałeś upada :-( –

Odpowiedz

6

aby pozbyć tle ("szew") paska narzędzi UIToolbar, utwórz podklasę UIToolbar i nadpisaj metodę (void) drawRect: (CGRect). Pozostaw to pole puste, a Twój pasek narzędzi UIToolbar nie będzie już miał tła.

Użyłem tego w moim własnym projekcie i pracowałem świetnie. Znalazłem to w komentarzach: http://osmorphis.blogspot.com/2009/05/multiple-buttons-on-navigation-bar.html

+2

FYI, iOS 5.0 obsługuje wiele przycisków paska nawigacji. Zobacz odpowiedź, którą zamieściłem poniżej. Jeśli jednak musisz wdrożyć dla starszych wersji systemu operacyjnego, nadal będziesz musiał użyć techniki opisanej w tej odpowiedzi. –

2

zobaczyć uicatalogue przykład dostępne w witrynie firmy Apple za darmo ... kiedyś kontrolę uisegmented pokazać trzy przyciski w miejscu prawym przyciskiem na pasku navigaion bar ...

+0

Niestety ja nie szukam kontrola segmentu. Chcę używać standardowych przycisków, takich jak + (przycisk dodawania), edycja, odświeżanie itd. – Cal

+0

można dodać niestandardowy widok za pomocą pożądanych przycisków ... wyszukaj google, aby wyświetlić niestandardowy kod widoku.youll być w stanie go zdobyć –

+0

istnieje wiele tutorialów na ten temat. Jeśli próbowałeś opublikować swój kod –

3
UIView *parentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, myWidth, myHeight)]; 
// make UIView customView1... (UILabel, UIButton, etc.) with desired frame and settings 
[parentView addSubview:customView1]; 
[customView1 release]; 
// make UIView customView2... (UILabel, UIButton, etc.) with desired frame and settings 
[parentView addSubview:customView2]; 
[customView2 release]; 
UIBarButtonItem *customBarButtomItem = [[UIBarButtonItem alloc] initWithCustomView:parentView]; 
[parentView release]; 
self.navigationItem.rightBarButtonItem = customBarButtomItem; 
[customBarButtomItem release]; 
+0

Chcę, aby przyciski wyglądały jak normalne UIBarButtonItems i móc używać stylów systemowych, takich jak UIBarButtonSystemItemAdd, UIBarButtonSystemItemRefresh. Podany link to robi, ale widać słabe połączenie, ponieważ jest to UIToolbar zagnieżdżony na pasku nawigacyjnym. – Cal

+0

Odpowiedź alex działa dla Ciebie idealnie –

+0

Próbowałem tego wcześniej, a przycisk wygląda inaczej. Możesz jednak zrobić zrzut ekranu wyglądem, który chcesz i użyć go w przycisku. – Cal

0

W iOS 4.x clearColor wydaje się nie mieć wpływu na pasek UIToolbar, a nadpisanie jego drawRect: did.

36

System iOS 5.0 obsługuje teraz wiele przycisków. Zobacz dokumentację systemu iOS dla UINavigationItem. W szczególności, co następuje:

Właściwości:

@property(nonatomic, copy) NSArray *leftBarButtonItems; 
@property(nonatomic, copy) NSArray *rightBarButtonItems; 
@property BOOL leftItemsSupplementBackButton; 

metod:

- (void)setLeftBarButtonItems:(NSArray *)items animated:(BOOL)animated; 
- (void)setRightBarButtonItems:(NSArray *)items animated:(BOOL)animated; 
0

wymyśliłem funkcji pomocnika używam całego mojego projektu. Zasadniczo sprawdza, czy na pasku jest już przycisk i dodaje nowy lub łączy go z istniejącymi przyciskami.Więc można wywołać funkcję tylko raz lub kilka razy:

+ (void)AddButtonToBar:(UIViewController *)controller withImage:(NSString *)imageName withAction:(SEL)action withFrame:(CGRect) frame{ 
    UIButton *newButton =[[UIButton alloc] init]; 
    [newButton setBackgroundImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal]; 
    newButton.frame = frame; 
    [newButton addTarget:controller action:action forControlEvents:UIControlEventTouchUpInside]; 

    if ([[controller.navigationItem rightBarButtonItems] count] == 0) 
     [controller.navigationItem setRightBarButtonItem:[[UIBarButtonItem alloc] initWithCustomView:newButton]]; 
    else { 
     NSMutableArray *existingButtons = [[NSMutableArray alloc] initWithArray:[controller.navigationItem rightBarButtonItems]]; 
     [existingButtons addObject:[[UIBarButtonItem alloc] initWithCustomView:newButton]]; 
     [controller.navigationItem setRightBarButtonItems:(NSArray *)existingButtons]; 
    } 
} 

wywołać ją od kontrolera widoku:.

[Helper AddButtonToBar:self withImage:@"imageName.png" withAction:@selector(myAction) withFrame:CGRectMake(0, 0, 24, 24)]; 
Powiązane problemy