Изменить (не init) идентификатор uibarbuttonitem программно?

В IB я могу установить идентификатор UIBarButtonItem в "play", который добавляет изображение кнопки воспроизведения (треугольник с правой кнопкой).

есть ли способ изменить это изображение программно? Я хочу изменить его на "пауза" при нажатии кнопки Play.

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

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

какие мысли?

3 ответов


хорошо, я загуглил этот вопрос до смерти и столкнулся с пример кода от Apple где они делают то же самое (переключить воспроизведение/пауза кнопка графика на кнопке панели инструментов). Но вместо использования встроенных идентификаторов воспроизведения и паузы UIBarButtonItem они используют пользовательский UIButton и переключать пользовательские изображения.

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

это то, что они (Apple) делают, чтобы переключать изображения при нажатии кнопки:

// Call this when the button you want to toggle is pressed:
[playButton setImage:((p.playing == YES) ? pauseBtnBG : playBtnBG) forState:UIControlStateNormal];

заменить p.играя с любым BOOL вы хотите, чтобы держать состояние вашей кнопки. playButton - это обычай UIButton на панели инструментов. pauseBtnBG и playBtnBG изображения для переключения.


это, кажется, работает довольно хорошо:

UIBarButtonItem *oldButton = [myToolBar.items objectAtIndex:1];
[myToolBar setItems:[NSArray arrayWithObjects:[myToolBar objectAtIndex:0], [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemStop target:self action:@selector(tapStopRefreshButton:)],nil] animated:NO];
[oldButton release];

в этом примере у меня была панель инструментов для UIWebView, и когда кто-то щелкнул перезагрузить, я хотел, чтобы она изменилась, чтобы остановить. На панели инструментов было только гибкое пространство и одна кнопка на нем - для выравнивания кнопки вправо, поэтому я схватил ссылку на старую кнопку, сделал новую с тем же селектором, что и старая, сбросил кнопки на панели вкладок, а затем отпустил оригинальную кнопку.

Не самый красивый, но вы можете использовать все стандартные кнопки без необходимости переопределения класса(классов) кнопок.


насчет 2 наборная панель инструментов? Затем вы можете иметь некоторые системные кнопки в верхней, и в нижней. Если кнопка воспроизведения нажата, просто скройте верхнюю панель инструментов.