iOS: измените png в элементе панели кнопок - PullRequest
2 голосов
/ 02 сентября 2011

Я помещаю в толбар элемент кнопки панели и устанавливаю его с помощью png (first.png), и когда я нажимаю на него, я хочу изменить его png в "second.png"

Этот кодне работает нормально:

UIImage *first = [UIImage imageNamed:@"first.png"];
UIImage *second = [UIImage imageNamed:@"second.png"];

if ([sender isSelected]) 
{  
    [sender setImage:first forState:UIControlStateNormal];  
    [sender setSelected:NO];  

}
else 
{     
    [sender setImage:second forState:UIControlStateSelected]; 
    [sender setSelected:YES];

}

Ответы [ 3 ]

4 голосов
/ 02 сентября 2011

Текущие ответчики не понимают, что UIBarButtonItem НЕ наследует от UIButton, поэтому setImage:forState: будет определенно не работать.UIBarButtonItems не может быть установлен для разных состояний.Вы можете , однако использовать что-то вроде этого (объявлено в UIBarItem документах ):

sender.image = [UIImage imageNamed:@"first.png"];
0 голосов
/ 02 сентября 2011

Мне не понятно, почему у вас там блок if. Разве вы не можете инициализировать оба изображения состояний как одноразовый шаг инициализации? * 1001 Т.е. *

[sender setImage:[UIImage imageNamed:@"first.png"] forState:UIControlStateNormal];  
[sender setImage:[UIImage imageNamed:@"second.png"] forState:UIControlStateSelected]; 

Фактически, это, вероятно, можно сделать в Интерфейсном Разработчике, если вам не нужно делать это программно.

0 голосов
/ 02 сентября 2011

Просто напишите после создания кнопки следующие строки:

UIImage *first = [UIImage imageNamed:@"first.png"];
UIImage *second = [UIImage imageNamed:@"second.png"];

[sender setImage:first forState:UIControlStateNormal];
[sender setImage:second forState:UIControlStateSelected]; 

Вам не нужно выражение if-else.

Обновлен:

CGRect myFrame;
UIButton *myButton = [[UIButton alloc] initWithFrame:myFrame];
[myButton setImage:[UIImage imageNamed:@"first.png"] forState:UIControlStateNormal];
[myButton setImage:[UIImage imageNamed:@"second.png"] forState:UIControlStateSelected];
UIBarButtonItem *barItem = [[UIBarButtonItem alloc] initWithCustomView:myButton];
[myButton release];
...