Miałem podobny problem. Początkowo podążałem ścieżką sugerowaną przez @drawnonward, ale potem wpadłem w kłopoty, gdy próbowałem, aby moja akcja przedstawiała kontroler popover na iPadzie: użycie wbudowanego przycisku UIButton jako widoku niestandardowego oznacza, że UIButton jest nadawcą zdarzenia, i PresentPopoverFromBarButtonItem: metoda kontrolera popover ulega awarii, gdy próbuje wysłać do niej komunikaty, które są odpowiednie tylko dla rzeczywistych elementów UIBarButtonItems.
Ostatecznie znalazłem rozwiązanie polegające na kradzieży obrazu, którego chciałem użyć (ikona „info”) z jednorazowego UIButton i skonstruowanie mojego UIBarButtonItem w następujący sposób:
UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeInfoLight];
UIBarButtonItem *barButton = [[[UIBarButtonItem alloc]
initWithImage:infoButton.currentImage
style:UIBarButtonItemStyleBordered
target:self
action:@selector(showInfo:)] autorelease];
Użycie tego inicjatora daje przycisk paska, którego cel i selektor faktycznie działają. Jest to również łatwiejsze niż zawijanie obrazu w widoku niestandardowym, ale to tylko lukier.
UIBarButtonItem
Dziedziczy zUIBarItem
aNSObject
więc nie wiem nic o akcentami. Byłoby miło, gdyby dokumentacja wspomniała, że właściwościaction
itarget
mają zastosowanie tylko wtedy, gdy widok niestandardowy to UIButton.