Как программно изменить представление UIBarButtonItem после его настройки в Интерфейсном Разработчике? - PullRequest
2 голосов
/ 13 апреля 2011

Я создал элемент UIBarButton в Интерфейсном Разработчике и связал его со свойством элемента UIBarButton в классе.В Интерфейсном Разработчике это Стиль = Обычный и Идентификатор = Пользовательский , и это Заголовок пуст .

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

Например,

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

[self.myBarButtonItem setCustomView:newButton];

, и это приводит к тому, что NOTHING отображается вообще.Почему это так?

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

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

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

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

Спасибо!

1 Ответ

3 голосов
/ 13 апреля 2011

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

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

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

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

...