【问题标题】:Adding action and target to a custom Navigation BarButtonItem?将动作和目标添加到自定义导航 BarButtonItem?
【发布时间】:2013-07-31 19:38:39
【问题描述】:

我正在尝试通过向 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];

【问题讨论】:

    标签: ios ios6 uibarbuttonitem


    【解决方案1】:

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

    要解释更多您想要的 uibarbuttonitem 是在操作方法内响应修饰,因为文档说您需要为 uibutton 执行此操作,因为您在案例 uibutton 中使用自定义视图初始化 uibarbuttonitem。

    【讨论】:

    • 谢谢,没想到这么简单。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 它不适用于 myButtonItem 但是当我将它添加到 myButton 时它起作用了!谢谢!
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-16
      • 1970-01-01
      相关资源
      最近更新 更多