UIButton как кнопка UINavigationbar - PullRequest
       11

UIButton как кнопка UINavigationbar

7 голосов
/ 30 сентября 2010

У меня есть приложение панели вкладок.и в одной из панелей вкладок у меня есть навигационный контроллер.Я пытаюсь установить UIB-кнопку с изображением в качестве правой кнопки на панели навигации.

    UIButton *refreshButton = [[UIButton alloc] init];
    [refreshButton setImage:[UIImage imageNamed:@"refresh_icon.png"] forState:UIControlStateNormal];
    [refreshButton addTarget:self action:@selector(refreshSection) forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithCustomView:refreshButton];
    //[rightButton setImage:[UIImage imageNamed:@"refresh_icon.png"]]; << DOESN'T WORK EITHER  
    self.navigationItem.rightBarButtonItem = rightButton;
    [refreshButton release];
    [rightButton release];

, но изображение не отображается.Я получаю невидимую кнопку.

РЕДАКТИРОВАТЬ: Я хочу, чтобы стиль кнопки был простым или фон был прозрачным, чтобы отображалось только изображение.Поэтому я использую UIbutton вместо прямого использования UIBarButton.

Ответы [ 2 ]

22 голосов
/ 30 сентября 2010

Вам не нужно создавать 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, чтобы визуально выделить кнопку при ее нажатии.

1 голос
/ 30 сентября 2010

Я закончил этим

    UIButton *refreshButton = [[UIButton alloc] initWithFrame:CGRectMake(292, 9, 27, 27)];
    [refreshButton setImage:[UIImage imageNamed:@"refresh_icon.png"] forState:UIControlStateNormal];
    [refreshButton addTarget:self action:@selector(refresh) forControlEvents:UIControlEventTouchUpInside];
    [self.navigationController.navigationBar addSubview:refreshButton];
    [refreshButton release];

Теперь он работает нормально, но я не совсем уверен, правильно ли это делается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...