将操作和目标添加到自定义导航BarButtonItem?

我正在尝试通过添加一个自定义button到rightBarButtonItem来自定义导航栏。 创build一个非常简单。

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。 苹果文件说:

由此方法创build的条形button项目不会响应用户交互调用其目标的动作方法。 相反,栏button项目期望指定的自定义视图来处理任何用户交互并提供适当的响应。

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

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

ANSWERED ————————————————- ———

只需要将此方法添加到UIButton:

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

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

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

添加一个动作和目标到这样一个UIButton

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

添加一个动作和目标到这样一个UIBarButtonItem

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

hgwhittleMustafa的帮助下,我实现了这个function,这里完美的剪辑可以帮助别人

  //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"); }