Изменить UIButton выделенное изображение в UINavigationBar - PullRequest
1 голос
/ 05 марта 2012

Я пытаюсь изменить UIImage на UIButton, когда выделено. UIButton расположен в UINavigationController.

У меня есть следующий код:

UIView *containingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 28, 28)];
UIButton *barUIButton = [UIButton buttonWithType:UIButtonTypeCustom];
[barUIButton setImage:[UIImage imageNamed:@"Add.png"] forState:UIControlStateNormal];
barUIButton.imageView.contentMode = UIViewContentModeScaleAspectFit;
barUIButton.frame = CGRectMake(-9, 0, 28, 28);
[barUIButton addTarget:self action:@selector(addButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
[barUIButton setImage:[UIImage imageNamed:@"AddHighlighted.png"] forState:UIControlStateSelected | UIControlStateHighlighted];
[containingView addSubview:barUIButton];
UIBarButtonItem *containingBarButton = [[[UIBarButtonItem alloc] initWithCustomView:containingView] autorelease];
self.navigationItem.rightBarButtonItem = containingBarButton;

Вместо нового изображения, отображаемого при выделении, вокруг существующего изображения просто черная тень.

Почему это?

1 Ответ

2 голосов
/ 06 марта 2012

Похоже, что экземпляр UIButton не выделяется или не выделяется при событии касания. Вероятно, это связано с тем, что UIBarButtonItem экземпляры не действуют как обычные кнопки; на самом деле они даже не UIButton subclasses.

Есть обходной путь. Если вы сохраняете ссылку на ваш UIButton в переменной экземпляра, вы можете добавить код для изменения изображения кнопки:

[barUIButton addTarget:self action:@selector(pressDown:) forControlEvents:UIControlEventTouchDown];
[barUIButton addTarget:self action:@selector(pressUp:) forControlEvents:UIControlEventTouchUp];

В pressDown: и pressUp: вы можете установить

-(void)pressDown:(id)sender
{
    [barUIButton setImage:[UIImage imageNamed:@"Add.png"] forState:UIControlStateNormal];
}

И аналогично для pressUp:.

...