Как программно изменить представление UIBarButtonItem после его настройки в Interface Builder?

Я создал элемент UIBarButton в Interface Builder и связал его со свойством элемента UIBarButton в классе. В Interface Builder это Style = Plain и Identifier = Custom, а Title is empty.

Внутри файла класса в методе viewDidLoad я пытаюсь добавить собственное представление к этому свойству UIBarButtonItem.

E.g

UISegmentedControl *newButton = [[UISegmentedControl alloc] initWithItems:....];
newButton.momentary = YES;
newButton.segmentedControlStyle = UISegmentedControlStyleBar;
newButton.tintColor = [UIColor .....];

[self.myBarButtonItem setCustomView:newButton];

и это приводит к тому, что НИЧЕГО не появляется вообще. Это почему?

Я читал, что если я создам UIBarButtonItem программно:

UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:newButton];

а потом добавить этот BarButtonItem на панель инструментов - все заработает. Моя проблема в том, что на моей панели инструментов есть много вещей, и этот элемент UIBarButton должен быть в ДАЛЕКОМ правом углу панели инструментов, и если я не могу связать его напрямую в построителе интерфейса, тогда мне придется построить ВСЕ мои элементы панели инструментов программно, чтобы получить макет, который мне нужен.

Итак, есть ли способ сделать это с помощью customView при ссылке на UIBarButtonItem, созданный в IB?

Спасибо!


person skålfyfan    schedule 13.04.2011    source источник
comment
я отредактировал свой ответ подходом, который мне нравится использовать, чтобы я больше не выглядел таким дешевым ублюдком;)   -  person Zaky German    schedule 14.04.2011


Ответы (1)


Чтобы изменить материал, который находится на UIToolBar, вы используете его свойство items. Это должно ответить на ваш вопрос: Как программно заменить элементы UIToolBar, встроенные в IB

Редактировать:

Как мне нравится работать с ними, это сделать кучу IBOutlets в классе контроллера представления для каждого элемента uibarbuttonitem. В Interface Builder я помещаю первые (по умолчанию) элементы на панель инструментов, как правило, как подвид панели инструментов и все такое, а остальные я помещаю как элементы верхнего уровня в xib (тот же уровень, что и представление, которое подключено к вывод свойства .view контроллера представления). Таким образом, мне не нужно программно создавать их. И по-прежнему скрывать их, чтобы позже прикрепить их к uitolbar.

Если вы используете этот подход, не забудьте вызвать выпуск для IBOutlets верхнего уровня, если вы используете ivar IBOutlets (в отличие от @property IBOutlets) в качестве всех объектов верхнего уровня в xib, которые не подключены к ссылке компилятора KVC.

person Zaky German    schedule 13.04.2011