iPhone UIBarButtonItem setCustomView: метод?

Я хочу настроить внешний вид моего UIBarButtonItem. Вот код, который я сейчас использую:

UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(267, 6, 48, 30)];
[editButton setCustomView:button];  // editButton is the UIBarButtonItem

К сожалению, UIButton не рисуется, т.е. он на 100% прозрачен. Я знаю, что кнопка есть, потому что когда я добавляю строку в код, например:

UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(267, 6, 48, 30)];
[editButton setCustomView:button];  // editButton is the UIBarButtonItem
UIRectFill(button.frame);

Я вижу черный квадрат в том месте, где должна быть кнопка.

Как я могу нарисовать свой UIButton? Я уже посмотрел кучу мест, но ничего не работает...


person ryyst    schedule 27.02.2010    source источник
comment
У меня была проблема как у вас, тоже жду решения, желаю вам удачи. stackoverflow.com/questions/7950644/   -  person user1021484    schedule 01.11.2011


Ответы (4)


Я не думаю, что вы можете установить пользовательский вид кнопки на другую кнопку. Кнопки являются сложными объектами, и их вложение таким образом обычно не работает.

Пользовательский атрибут представления предназначен для украшения, а не для функциональности. Вы должны загрузить пользовательское представление с внешним видом, который вы хотите для UIBarButtonItem, и позволить ему обрабатывать фактическую логику кнопки.

person TechZen    schedule 27.02.2010
comment
Уже пробовал с UIImageView, не работает, все равно просто исчезает. - person ryyst; 27.02.2010

Вы пытались запустить его с помощью пользовательского представления, которое является UIImageView? Если это сработает, вы можете создать UIImageView таким образом, чтобы он имитировал классический UIButton, как описано здесь:

Как создать большую красную кнопку UIButton с помощью iPhone SDK?

Но в целом, с точки зрения пользовательского интерфейса, странно иметь классический «UIButton» вместо «UIBarButtonItem»:/

person yonel    schedule 27.02.2010
comment
Пробовал, тоже самое: кнопка просто пропадает. - person ryyst; 27.02.2010

Проконсультируйтесь с моим ответом на этот вопрос.

Я думаю, что лучше не ставить UIButton внутри UIBarButtonItem. Они делают одно и то же более или менее, и BBI существуют не просто так — они легковесны по сравнению с UIButtons, и у них хорошие отношения с UINavigationItems.

Я думаю, что мы можем помочь немного лучше, если вы сообщите нам - какова общая цель, которую вы пытаетесь достичь? Таким образом, мы можем помочь найти жизнеспособное решение.

person QED    schedule 01.03.2012

У меня была похожая проблема; кнопка не появилась, и нажатие в этом месте тоже ничего не дало. Установка границ кнопки казалась волшебством, которое заставляет ее работать.

Вот код, который я использую для установки правой кнопки:

UIButton* addButton = [UIButton buttonWithType:UIButtonTypeCustom];
[addButton addTarget:self action:@selector(onAdd) forControlEvents:UIControlEventTouchUpInside];
[addButton setImage:[UIImage imageNamed:@"button_plus.png"] forState:UIControlStateNormal];
addButton.bounds = CGRectMake(0, 0, 30, 30);
UIBarButtonItem* addItem = [[UIBarButtonItem alloc] initWithCustomView:addButton];
navitem.rightBarButtonItem = addItem;
person AndrewS    schedule 30.03.2012