Изменить (не 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 наборная панель инструментов? Затем вы можете иметь некоторые системные кнопки в верхней, и в нижней. Если кнопка воспроизведения нажата, просто скройте верхнюю панель инструментов.