2013-07-31 114 views
6

我想通过向rightBarButtonItem添加一个自定义按钮来自定义导航栏。创建一个非常简单。将操作和目标添加到自定义导航BarButtonItem?

UIImage *myImage = [UIImage imageNamed:@"menu-icon.png"]; 

UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[myButton setFrame:CGRectMake(0, 0, myImage.size.width, myImage.size.height)]; 
[myButton setBackgroundImage:myImage forState:UIControlStateNormal]; 

UIBarButtonItem *myButtonItem = [[UIBarButtonItem alloc] initWithCustomView:myButton]; 

[navItem setLeftBarButtonItem:myButtonItem animated:YES]; 

看起来不错,除了现在我无法设置目标或操作属性。下面的代码什么也不做:

myButtonItem.target = myTarget; 
myButtonItem.action = @selector(myButtonAction); 

我发现它不工作的原因是因为我与-initWithCustomView初始化的UIBarButtonItem。苹果文档说:

该方法创建的条形按钮项目不会响应用户交互调用其目标的动作方法。相反,酒吧按钮项目期望指定的自定义视图来处理任何用户交互并提供适当的响应。

我有点困惑,究竟苹果是什么意思。我应该创建一个自定义控件或什么?我还没有真正做到这一点,我不知道从哪里开始。

有没有人有任何建议如何做到这一点或另一种方式来设置自定义导航栏按钮?

回答-------------------------------------------- --------------

刚把这个方法添加到UIButton的:

[myButton addTarget:myTarget action:@selector(myButtonAction) forControlEvents:UIControlEventTouchUpInside]; 

回答

6

这很简单,你需要添加uibutton的目标而不是uibarbuttonitem。

要解释更多你想要的uibarbuttonitem是响应触摸内部的行动方法,因为文档说,你需要为uibutton做这个,因为你正在初始化uibarbuttonitem与自定义视图在你的情况下uibutton。

+0

谢谢,没有意识到它是那么简单。 – DJSK

4

添加动作和目标的UIButton这样的:

[myButton addTarget:self 
      action:@selector(handleMyButtonTap) 
    forControlEvents:UIControlEventTouchUpInside];

添加动作和目标到UIBarButtonItem像这样:

[myBarButtonItem setAction:@selector(handleBarButtonTap)]; 
[myBarButtonItem setTarget:aTarget];
+0

它没有一起工作myButtonItem,但是当我将它添加到myButton时它工作!谢谢! – DJSK

0

有了答案由hgwhittle穆斯塔法我实现了帮助,在这里完美的作品 是完全剪断可以帮助别人

 //Create ImageButton 
     UIImage *shareBtnIcon = [UIImage imageNamed:@"dummy_share_icon_22"]; 

     UIButton *shareButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
     [shareButton setFrame:CGRectMake(0, 0, shareBtnIcon.size.width, shareBtnIcon.size.height)]; 
     [shareButton setBackgroundImage:shareBtnIcon forState:UIControlStateNormal]; 

     [shareButton addTarget:self action:@selector(shareButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; 

     //Create BarButton using ImageButton 
     UIBarButtonItem *shareBarBtn = [[UIBarButtonItem alloc] initWithCustomView:shareButton]; 

     //Add BarButton to NavigationBar 
     self.navigationItem.rightBarButtonItems = [[NSArray alloc] initWithObjects:shareBarBtn, nil]; 

//method for share butto click 
-(void) shareButtonClicked:(UIButton*)sender 
{ 
    NSLog(@"you clicked on share button %ld"); 
} 
相关问题