2014-09-12 3 views
0

Я хочу добавить пользовательское изображение в качестве элемента меню слева. То почему я использую customView еще я получаю мое изображение но в синем.MenuItemButtom action не работает

Это, как я достигну его:

UIImageView *menuItemImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"MenuButton"]]; 
UIBarButtonItem *leftMenuItemButton = [[UIBarButtonItem alloc] initWithCustomView:menuItemImageView]; 
[leftMenuItemButton setAction:@selector(menuClicked:)]; 
[leftMenuItemButton setTarget:self]; 
self.navigationItem.leftBarButtonItem = leftMenuItemButton; 

Все работает за исключением того, когда я нажимаю мой кнопку ничего не происходит. Это никогда не приходит сюда:

- (void)menuClicked:(id)menuClicked { 
    NSLog(@"%s menuClicked", __PRETTY_FUNCTION__); 
} 

Кто-то может мне помочь?

+0

Использовать 'UIButton' вместо' UIImageView' и добавить цели на кнопку. Затем используйте кнопку как пользовательский вид. Установите изображение на кнопке. ** ИЛИ ** использовать 'initWithImage: style: target: action:'. Я рекомендую второй вариант. – n00bProgrammer

+0

Когда я использую второй вариант, мое изображение синее, а не мой первоначальный цвет. – user1007522

+2

Использовать 'initWithImage: [[UIImage imageNamed: @" MenuButton "] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal]' – n00bProgrammer

ответ

0

Благодаря n00bprogrammer:

UIBarButtonItem * menuItem = [[UIBarButtonItem alloc] initWithImage:[[UIImage imageNamed:@"MenuButton"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] style:UIBarButtonItemStylePlain target:self action:@selector(menuClicked:)] ; 
    self.navigationItem.leftBarButtonItem = menuItem; 
0

Проблема здесь, кажется, использует ImageView, UIBarButtonItem target и action работают только в том случае, если пользовательский вид UIButton.

Попробуйте что-то вроде этого

UIButton* someBtn = [UIButton buttonWithType: UIButtonTypeInfoLight]; 
UIBarButtonItem *leftMenuItemButton = [[UIBarButtonItem alloc] initWithCustomView:someBtn]; 
[leftMenuItemButton setAction:@selector(menuClicked:)]; 
[leftMenuItemButton setTarget:self]; 
self.navigationItem.leftBarButtonItem = leftMenuItemButton; 

Надеюсь, что это помогает

+0

Вроде я не могу установить изображение. – user1007522

0

Во-первых, вам нужно создать пользовательский UIButton и UIBarButtonItem

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
[button addTarget:self action:@selector(menuClicked:) forControlEvents:UIControlEventTouchUpInside]; 
[button setImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateNormal]; 
[button setImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateHighlighted]; 
UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:button]; 

Добавить кнопку Панель навигации

[self.navigationItem setLeftBarButtonItems:[NSArray arrayWithObjects:barButton, nil]]; 
+0

Это не отображает ничего: s – user1007522

+0

change imageName value of both states. – fdlr

0

Оба ответа указывают на правильное направление.

Это, как я получил это работает:

UIButton *showCalendar = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 30, 30)]; 
showCalendar.frame = CGRectMake(0, 0, 40, 30); 
[showCalendar setImage:[UIImage imageNamed:@"calendar"] forState:UIControlStateNormal]; 
[showCalendar addTarget:self action:@selector(toggleCalendar) forControlEvents:UIControlEventTouchUpInside]; 
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:showCalendar]; 
0

Вот код, добавить водопроводную жест к вашему ImageView:

UIImageView *menuItemImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"MenuButton"]]; 
UIBarButtonItem *leftMenuItemButton = [[UIBarButtonItem alloc] initWithCustomView:menuItemImageView]; 

UITapGestureRecognizer *tapGesture = 
[[UITapGestureRecognizer alloc] initWithTarget:self 
             action:@selector(menuClicked:)]; 
[menuItemImageView addGestureRecognizer:tapGesture]; 
Смежные вопросы