У меня была аналогичная проблема. И я сначала пошел по пути, предложенному @drawnonward, но затем столкнулся с проблемой, когда попытался представить своим действием всплывающий контроллер на iPad: использование встроенного UIButton в качестве настраиваемого представления означает, что UIButton является отправителем события, и Метод presentPopoverFromBarButtonItem: контроллера всплывающего окна дает сбой при попытке отправить ему сообщения, которые подходят только для фактических элементов UIBarButtonItem.
Решение, которое я в конце концов нашел, заключалось в том, чтобы украсть изображение, которое я хотел использовать (значок «информация») из одноразового UIButton, и сконструировать мой UIBarButtonItem следующим образом:
UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeInfoLight];
UIBarButtonItem *barButton = [[[UIBarButtonItem alloc]
initWithImage:infoButton.currentImage
style:UIBarButtonItemStyleBordered
target:self
action:@selector(showInfo:)] autorelease];
Использование этого инициализатора дает кнопку-полосу, цель и селектор которой действительно работают. Это также проще, чем оборачивать изображение в пользовательском представлении, но это просто глазурь.
UIBarButtonItem
наследуется отUIBarItem
иNSObject
поэтому ничего не знает о прикосновениях. Было бы неплохо, если бы в документации упоминалось, что свойстваaction
иtarget
применяются только в том случае, если настраиваемое представление является UIButton.