Изменить (не инициализировать) идентификатор UIBarButtonItem программно? - PullRequest
10 голосов
/ 16 июня 2010

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

Есть ли способ изменить это изображение программно? Я хочу изменить его на «пауза» при нажатии кнопки воспроизведения.

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

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

Есть мысли?

Ответы [ 3 ]

14 голосов
/ 16 июня 2010

Хорошо, я погуглил этот вопрос до смерти и наткнулся на образец кода от 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 - изображения для переключения.

13 голосов
/ 09 декабря 2010

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

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, и когда кто-то нажимал «Обновить», я хотел, чтобы он изменился на «Стоп».На панели инструментов было только свободное место и одна кнопка - чтобы выровнять кнопку по правому краю - поэтому я взял ссылку на старую кнопку, сделал новую с тем же селектором, что и у старой, сбросил кнопки на панели вкладок, а затем отпустил оригинальную кнопку.

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

0 голосов
/ 19 апреля 2013

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

...