Вам не нужно создавать UIButton
и использовать его в качестве пользовательского представления в UIBarButtonItem
. Вы можете создать UIBarButtonItem
непосредственно с изображением:
UIImage *myImage = [UIImage imageNamed:@"myImage.png"];
UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithImage:myImage style:UIBarButtonItemStyleBordered target:self action:@selector(refreshSection)];
self.navigationItem.rightBarButtonItem = button;
[button release];
-
Обновлено, согласно комментариям
Используйте UIImageView
в качестве пользовательского представления в UIBarButtonItem
:
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"myImage.png"]];
UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithCustomView:imageView];
self.navigationItem.rightBarButtonItem = rightButton;
[imageView release];
[rightButton release];
-
Обновлено
Пробовал последний подход, и хотя он выглядит так, как вы этого хотите, я не могу заставить его справиться с нажатиями. Хотя цель и действие были установлены.
-
Окончательное обновление
Я получил ваш исходный код в вопросе. Причина, по которой изображение не отображается, в том, что вы не установили рамку кнопки. После установки рамки изображение отображается на панели навигации.
Вот мой фрагмент, который я использовал и протестировал:
UIImage *myImage = [UIImage imageNamed:@"paw.png"];
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom];
[myButton setImage:myImage forState:UIControlStateNormal];
myButton.showsTouchWhenHighlighted = YES;
myButton.frame = CGRectMake(0.0, 0.0, myImage.size.width, myImage.size.height);
[myButton addTarget:self action:@selector(tapped:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithCustomView:myButton];
self.navigationItem.rightBarButtonItem = rightButton;
[rightButton release];
[myButton release];
Примечание. Я установил свойство showsTouchWhenHighlighted
UIButton
, чтобы визуально выделить кнопку при ее нажатии.