Изменить (не инициализировать) идентификатор UIBarButtonItem программно?
В IB я могу установить идентификатор UIBarButtonItem в "play", который добавляет изображение кнопки воспроизведения (треугольник, указывающий вправо).
Есть ли способ изменить это изображение программно? Я хочу изменить его на "пауза" при нажатии кнопки воспроизведения.
Я знаю, что вы можете инициализировать UIBarButtonItem с идентификатором, но мне еще предстоит найти способ изменить его после инициализации. Это вообще возможно?
Единственное, о чем я могу думать, это удалить старую кнопку и инициализировать новую вместо нее, но это вряд ли кажется эффективным.
Какие-нибудь мысли?
Ответы
Ответ 1
Хорошо, я догадался до этого вопроса и наткнулся на пример кода из 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.playing любым BOOL, которым вы хотите удерживать состояние вашей кнопки. playButton
является пользовательским UIButton
на панели инструментов. pauseBtnBG
и playBtnBG
- это изображения для переключения.
Ответ 2
Это работает довольно хорошо:
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, и когда кто-то нажал кнопку "Обновить", я хотел, чтобы она изменилась на "Стоп". На панели инструментов было только гибкое пространство и одна кнопка на нем - чтобы выровнять по правому краю кнопку - так что я взял ссылку на старую кнопку, сделал новую с тем же селектором, что и старые, reset кнопки на и затем отпустили исходную кнопку.
Не самый красивый, но вы можете использовать все стандартные кнопки без необходимости переопределять класс кнопки.
Ответ 3
Как насчет двух сложенных панелей инструментов? Тогда вы можете иметь некоторые системные кнопки в верхней, а другие - в нижней. Если нажата кнопка воспроизведения, просто скройте верхнюю панель инструментов.