2014-09-12 186 views
0

我想添加一个自定义图像作为左菜单项。这就是为什么我使用自定义视图,否则我得到我的形象,但在蓝色。MenuItemButtom操作不起作用

这是我如何实现它:

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 2014-09-12 12:12:14

+0

当我使用第二个选项时,我的图像是蓝色的,而不是我的原始颜色。 – user1007522 2014-09-12 12:16:50

+2

使用'initWithImage:[[UIImage imageNamed:@“MenuButton”] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]' – n00bProgrammer 2014-09-12 12:19:37

回答

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目标和动作只适用于自定义视图是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 2014-09-12 12:19:27

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 2014-09-12 12:19:04

+0

更改两个按钮状态的imageNamed值。 – fdlr 2014-09-12 12:21:10

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];