6

我正在尝试通过向 rightBarButtonItem 添加自定义按钮来自定义导航栏。创建一个非常简单。

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

3 回答 3

6

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

为了解释更多你想要的 uibarbuttonitem 是在动作方法中响应触摸,因为文档说你需要为 uibutton 这样做,因为你在你的案例 uibutton 中使用自定义视图初始化你的 uibarbuttonitem。

于 2013-07-31T19:44:50.047 回答
4

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

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

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

[myBarButtonItem setAction:@selector(handleBarButtonTap)];
[myBarButtonItem setTarget:aTarget];
于 2013-07-31T19:43:18.573 回答
0

在hgwhittleMustafa的答案的帮助下,我实现了它在这里完美运行,完整的片段可以帮助某人

        //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");
}
于 2015-01-12T11:25:53.163 回答