Ich hatte ein ähnliches Problem. Ich folgte zunächst dem von @drawnonward vorgeschlagenen Pfad, geriet dann jedoch in Schwierigkeiten, als ich versuchte, meine Aktion als Popover-Controller auf einem iPad anzuzeigen: Die Verwendung eines eingebetteten UIButton als benutzerdefinierte Ansicht bedeutet, dass der UIButton der Absender des Ereignisses ist, und Die Methode presentPopoverFromBarButtonItem: des Popover-Controllers stürzt ab, wenn versucht wird, Nachrichten zu senden, die nur für tatsächliche UIBarButtonItems geeignet sind.
Die Lösung, die ich schließlich fand, bestand darin, das Bild, das ich verwenden wollte (das "Info" -Symbol), von einem Wegwerf-UIButton zu stehlen und mein UIBarButtonItem wie folgt zu erstellen:
UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeInfoLight];
UIBarButtonItem *barButton = [[[UIBarButtonItem alloc]
initWithImage:infoButton.currentImage
style:UIBarButtonItemStyleBordered
target:self
action:@selector(showInfo:)] autorelease];
Die Verwendung dieses Initialisierers ergibt eine Balkenschaltfläche, deren Ziel und Auswahl tatsächlich funktionieren. Es ist auch einfacher als das Bild in eine benutzerdefinierte Ansicht zu verpacken, aber das ist nur ein Sahnehäubchen.
UIBarButtonItem
erbt vonUIBarItem
undNSObject
weiß daher nichts über Berührungen. Es wäre schön, wenn in den Dokumenten erwähnt würde, dass die Eigenschaftenaction
undtarget
nur gelten, wenn die benutzerdefinierte Ansicht ein UIButton ist.