2013-04-17 25 views
16

Robię przycisków niestandardowych bar dla UINavigationBar używam następujący kodUIBarButtonItem widok niestandardowy w UINavigationBar

UIImageView *backImgView= [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"chk_back.png"]]; [backImgView setUserInteractionEnabled:YES]; 
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithCustomView:backImgView]; 
[backButton setTarget:self]; 
[backButton setAction:@selector(BackBtn)]; 
checkIn_NavBar.topItem.leftBarButtonItem = backButton; 

Problem polega na tym, że nie dzwoni jego działanie. Co robię źle?

+0

Czy mogę zobaczyć na twojej metodzie BackBtn? – Arthur

+0

Co to jest checkIn_NavBar? Czy masz silne odniesienie do niego? Dlaczego nie używać self.navigationItem.leftBarButtonItem? –

+0

spróbuj i użyj [checkIn_NavBar setLeftBarButtonItem: backButton]; lub self.navigationItem.leftBarButtonItem = backButton; – Bonnie

Odpowiedz

37

Z dokumentacji Apple:
Inicjuje nową pozycję przy użyciu określonego widok niestandardowy.

- (id)initWithCustomView:(UIView *)customView 

Parametry CustomView Niestandardowy widok reprezentujący element. Wartość zwracana Nowo zainicjowany element o określonych właściwościach.

Dyskusja: Element przycisku paska utworzony za pomocą tej metody nie wywołuje metody działania celu w odpowiedzi na interakcje użytkownika. Zamiast tego element przycisku paska oczekuje określonego widoku niestandardowego, aby obsłużyć dowolne interakcje użytkownika i zapewnić odpowiednią odpowiedź.

Rozwiązanie: "Utwórz przycisk z obrazem tła (ustaw akcję na tym przycisku) i przycisk paska inicjowania za pomocą tego przycisku". Na przykład:

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
btn.frame = CGRectMake(0,0,25,25) 
[btn setBackgroundImage:[UIImage imageNamed:@"chk_back.png"] forState:UIControlStateNormal]; 
[btn addTarget:self action:@selector(BackBtn) forControlEvents:UIControlEventTouchUpInside]; 
UIBarButtonItem *barBtn = [[UIBarButtonItem alloc] initWithCustomView:btn]; 
+4

Dobra odpowiedź, ale: Dokument mówi: "Podczas tworzenia niestandardowego przycisku - czyli przycisku typu UIButtonTypeCustom - ramka przycisku jest początkowo ustawiona na (0, 0, 0, 0). Przed dodaniem przycisku do twój interfejs, powinieneś zaktualizować ramkę do bardziej odpowiedniej wartości. " Więc powinieneś definitywnie ustawić ramkę przycisku, inaczej nic nie zobaczysz! B v –

+0

@ ReinhardMänner - uratowałeś mnie, człowieku! Ponadto, jest to straszna wartość domyślna dla ramki ... – katzenhut

+0

@katzenhut - cieszę się, że mogłem ci pomóc, a masz całkowitą rację co do wartości domyślnej ... –

1
UIBarButtonItem *graphButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"GraphButton.png"] 
                    style:UIBarButtonItemStyleBordered 
                    target:self 
                    action:@selector(graphButton)]; 
self.navigationItem.rightBarButtonItem = graphButton; 

- (void)graphButton{ 
} 
+0

Wyniki w dwóch nakładających się obrazach – Hassy

+0

? Nakładających się? Masz na myśli, że w pasku nawigacyjnym po prawej stronie znajduje się przycisk? – brianLikeApple

+0

Usunięcie kodu i skopiowanie mojego kodu i zastąpienie nazwy obrazu przycisku. Zmień funkcję selektora, jak chcesz. To powinno działać! – brianLikeApple

1

osiągnąłem to, używając następującego kodu:

UIButton *nxtBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 
[nxtBtn setImage:[UIImage imageNamed:@"chk_next.png"] forState:UIControlStateNormal]; 
[nxtBtn addTarget:self action:@selector(NextBtn) forControlEvents:UIControlEventTouchUpInside]; 
[nxtBtn setFrame:CGRectMake(0, 0, 64, 31)]; 
UIBarButtonItem *nextButton = [[UIBarButtonItem alloc] initWithCustomView:nxtBtn]; 

checkIn_NavBar.topItem.rightBarButtonItem=nextButton; 
+1

Więc twoje dodanie przycisku na przycisku. To w ogóle nie brzmi dobrze. – Popeye

Powiązane problemy