2009-09-21 17 views

Odpowiedz

31

Poprzednia odpowiedź była bliska, nie została skompilowana. Oto, czego naprawdę chcesz:

// Info button 
UIButton* infoButton = [UIButton buttonWithType:UIButtonTypeInfoLight]; 
[infoButton addTarget:self action:@selector(showInfoView:) forControlEvents:UIControlEventTouchUpInside]; 
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:infoButton]; 
+0

W jaki sposób można wdrożyć metodę "showInfoView", którą wskazałeś? – Shawn

+0

Shawn, po prostu mam - (void) showInfoView: (id) nadawca {gdzie indziej w twojej implementacji. Jeśli nie ma: na końcu metody, żadne argumenty nie zostaną przekazane i możesz to zrobić bez: (id) nadawcy. – quantumpotato

0

Powinieneś być w stanie dodać przycisk typu "Światła informacyjnego" do elementu nawigacyjnego kontrolera widoku, który jest aktualnie wyświetlany przez kontroler UINavigationController. Coś takiego może wejść w Twój kod kontrolera widoku:

- (void) viewDidLoad { 
    UIButton * info = [UIButton buttonWithType:UIButtonTypeInfoLight]; 
    // set your button's target and selector for whatever action here. 
    self.navigationItem.rightBarButtonItem.customView = info; 
} 
+0

Kevlar, Zmodyfikuj swoją odpowiedź .. buttonType jest własnością tylko do odczytu. Nie możesz tego ustawić! – prakash

+0

moje złe, odchodziłem z pamięci i nie miałem przed sobą dokumentów; teraz się zmienia. – Kevlar

3

W powyższej odpowiedzi występuje przeciek pamięci. Powinieneś użyć "autorelease", aby tego uniknąć. Próbowałem edytować odpowiedź, ale jak dotąd nie udało mi się.

// Info button 
UIButton* infoButton = [UIButton buttonWithType:UIButtonTypeInfoLight]; 
[infoButton addTarget:self action:@selector(showInfoView:) forControlEvents:UIControlEventTouchUpInside]; 
self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:infoButton] autorelease]; 

TO JEST PRAWIDŁOWA DROGA DO ZROBIENIA.

+2

Prawidłowe działanie nie polega na edycji odpowiedzi, ale na wysłaniu własnej odpowiedzi * za pomocą wersji rozwiązania * lub, po uzyskaniu 50 punktów reputacji, na skomentowanie odpowiedzi, aby plakat mógł ją poprawić. Komentarze bez rozwiązania, które są publikowane jako odpowiedzi, zostaną najprawdopodobniej usunięte. W końcu nie ma "odpowiedzi powyżej", ponieważ pozycja odpowiedzi zależy od karty sortowania używanej do wyświetlenia strony, głosów i tego, czy odpowiedź została przyjęta czy usunięta. Lepiej odnieść się do odpowiedzi lub komentarzy na stronie według nazwiska plakatu. –

+0

dzięki. Nie wiedziałem o tym! –

0

Możesz również użyć celu i selektora dla bieżącego przycisku paska przycisku informacyjnego.

UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeInfoLight]; 
[infoButton addTarget:self.barButtonItem.target action:self.barButtonItem.action forControlEvents:UIControlEventTouchUpInside]; 
self.barButtonItem.customView = infoButton; 

W ten sposób wszelkie czynności lub segues połączone z elementem przycisku paska zostaną przeniesione do przycisku informacyjnego.

Powiązane problemy