Возникли проблемы при изменении изображения UIBarButtonItem - PullRequest
6 голосов
/ 22 ноября 2010

Я пытаюсь различными способами изменить изображение UIBarButtonItem после его нажатия, но безуспешно.

// bookmarkButton is a property linked up in IB
-(IBAction)bookmarkButtonTapped:(id)sender
{
NSLog(@"this action triggers");
// attempt 1
UIBarButtonItem* aBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"bookmarkdelete.png"] style:UIBarButtonItemStylePlain target:self action:@selector(bookmarkButtonTapped:)];
bookmarkButton = aBarButtonItem;
[aBarButtonItem release];

// attempt 2
bookmarkButton.image = [UIImage imageNamed:@"bookmarkdelete.png"];
}

Есть ли другой способ сделать это?

Ответы [ 4 ]

2 голосов
/ 25 ноября 2010

Панель инструментов содержит массив - items - как свойство.Поэтому после настройки панели инструментов в качестве свойства IBOutlet мне пришлось вставить новую кнопку в этот массив .. как это:

NSMutableArray *items = [[NSMutableArray alloc] initWithArray:self.toolBar.items];
UIBarButtonItem *newButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"newButton.png"]  style:UIBarButtonItemStylePlain target:self action:@selector(buttonTapped:)];
[items replaceObjectAtIndex:0 withObject:newButton];
self.toolBar.items = items;
[newButton release];
[items release];
0 голосов
/ 01 февраля 2016

Это должно работать

UIImage *normalButtonImage = [UIImage imageNamed:@"TableViewIcon"];
UIImage *selectedButtonImage = [UIImage imageNamed:@"CollectionViewIcon"];
CGRect rightButtonFrame = CGRectMake(0, 0, normalButtonImage.size.width,
                                     normalButtonImage.size.height);
UIButton *rightButton = [[UIButton alloc] initWithFrame:rightButtonFrame];
[rightButton setBackgroundImage:normalButtonImage forState:UIControlStateNormal];
[rightButton setBackgroundImage:selectedButtonImage forState:UIControlStateSelected];
[rightButton addTarget:self action:@selector(toggleTableView:)
      forControlEvents:UIControlEventTouchDown];
self.toggleMediaView = [[UIBarButtonItem alloc] initWithCustomView:rightButton];
[self.navigationItem setLeftBarButtonItem:self.toggleMediaView];
self.navigationItem.leftBarButtonItem.enabled = NO;
0 голосов
/ 22 ноября 2010

попробуй [bookmarkButton setImage:[UIImage imageNamed:@"bookmarkdelete.png"] forState:UIControlStateNormal];

0 голосов
/ 22 ноября 2010

Является ли кнопка закладки кнопкой UIB?На него следует ссылаться через (UIButton *)aBarButtonItem.customView, а не напрямую?

Если это UIButton, вам нужно установить изображение на основе состояния: - (void)setImage:(UIImage *)image forState:(UIControlState)state

Обратите внимание, что есть такжеsetBackgroundImage с тем же API, если вы хотите этого.

...