设置自定义UIBarButtonItem的操作

时间:2015-01-20 20:10:52

标签: ios objective-c

我已经创建了一个UIView,必须添加到BarButtonItem。但我无法对此按钮设置操作。这是我正在使用的代码:

 self.menuBarButton = [[UIBarButtonItem alloc] initWithCustomView:self.containerView];
    [self.menuBarButton setTarget:self];
    [self.menuBarButton setAction:@selector(menuButtonTapped)];
    self.navigationItem.leftBarButtonItem = self.menuBarButton;

行动并不成功。在将其设置为自定义后,我还尝试将操作直接设置为bar按钮。

        [self.navigationItem.leftBarButtonItem setTarget:self];
        [self.navigationItem.leftBarButtonItem setAction:@selector(menuButtonTapped)];

当我为通常的按钮项目执行此操作时。你能帮忙发现错误吗?

5 个答案:

答案 0 :(得分:5)

使用自定义视图expects the view to handle user interaction初始化UIBarButtonItem

  

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

如果您的UIView尚未处理任何用户互动,那么正如Miken所说,您可以将UIView替换为您使用{{1}配置的UIButton }。

特别是,如果您尝试设置图片,addTarget:selector可以通过setImage:forState:进行设置。

另见this answer

答案 1 :(得分:0)

当您为UIBarButtonItem使用自定义视图时,您必须自己处理这些操作。使用UIButton替换自定义视图,或将UIButton添加到自定义视图,然后添加目标&选择按钮。

这是一个例子,但请记住我是自由形成这个例子,所以它可能不是100%准确的代码,但概念将是相同的。

UIButton *button = [UIButton buttonWithType:UIBarButtonTypeCustom];
UIBarButtonItem *bbi = [[UIBarButtonItem alloc] initWithCustomView:button];
[button addTarget:self selector:@selector(myBtnClk)];

答案 2 :(得分:0)

要为按钮添加操作,您需要做两件事:创建方法,然后将其添加到按钮。这是方法(注意语法):

- (IBAction) my_method : (id) sender {
UIButton * btn = sender;
}

现在操作分配(创建按钮的位置):

[ my_button addTarget : self
               action : @selector( my_method : )
     forControlEvents : UIControlEventTouchUpInside ];

答案 3 :(得分:0)

我建议不要单独使用- setAction,而是建议使用:- addTarget:action:forControlEvents:。在iOS(AppKit)中有许多类型的事件。您可以查看附加的图像以供参考。通常,内部触摸适合按下按钮。

答案 4 :(得分:0)

我决定了这个问题。所有答案都是关于向UIButton添加目标和操作,然后使用此按钮创建UIBarButtonItem。但正如我所说,将UIView设置为这个按钮是非常必要的(我忘了说它是必要的,因为这个UIView有动画,也许这就是为什么所有答案都很好但我的情况不对。) 但杰森欧文的一个答案(https://stackoverflow.com/a/28054357/4464891)给了我很好的想法。我必须使用自定义视图,因此我通过添加带有initWithTarget:action:的UITapGestureRecognizer将选择器设置为我的自定义UIView:

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(menuButtonTapped)]; [self.containerView addGestureRecognizer:tapRecognizer];

当我点击按钮时,tapRecognizer会运行我的选择器。就是这样了。希望它对某人有帮助=)