如何在运行时为UIBarButtonItem设置目标和操作

Sha*_*ief 61 iphone objective-c uibarbuttonitem ios swift

试过这个但只适用于UIButton:

[btn setTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
Run Code Online (Sandbox Code Playgroud)

Ole*_*ann 102

只需直接设置UIBarButtonItem targetaction属性即可.

  • NB这只适用于`UIBarButtonItem`不使用自定义视图,如`UIButton` (45认同)
  • 对于自定义视图,请使用:[button addTarget:self action:@selector(buttonPressed)forControlEvents:UIControlEventTouchUpInside]; (23认同)
  • 根据文档,这不适用于已使用自定义视图初始化的实例。“通过此方法创建的条形按钮项不会调用其目标的操作方法来响应用户交互。相反,条形按钮项期望指定的自定义视图来处理任何用户交互并提供适当的响应。” 请参阅 http://apple.co/2egXdmR 以供参考 (2认同)

mih*_*hai 20

UIBarButtonItem没有相同的addTarget方法,因此您必须按如下方式直接设置它们

btn.target = self;
btn.action = @selector(barButtonCustomPressed:);
Run Code Online (Sandbox Code Playgroud)

...

// can specify UIBarButtonItem instead of id for this case
-(IBAction)barButtonCustomPressed:(UIBarButtonItem*)btn 
{
    NSLog(@"button tapped %@", btn.title);
}
Run Code Online (Sandbox Code Playgroud)


J. *_*ave 14

我遇到了类似的问题...我认为你的意思是如果你的UIButton不是你的UITabBar的一部分来调用btnClicked然后它适当地工作.如果这是您提出的问题,请检查您的btnClicked方法并将其更改为:

-btnClicked:(id)sender
Run Code Online (Sandbox Code Playgroud)

-(void) btnClicked:(id)sender
Run Code Online (Sandbox Code Playgroud)

那,并在头文件中声明btnClicked ...

对于它的价值,这就是我在tabbarbuttonitem中设置按钮的方式:

UIBarButtonItem *exampleButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"button.png"] style:UIBarButtonItemStylePlain target:self action:@selector(btnClicked:)];
Run Code Online (Sandbox Code Playgroud)


Har*_*dim 13

设置targetaction你的UIBarButtonItem

斯威夫特4

button.target = self
button.action = #selector(action)

@objc func action (sender:UIButton) {
    print("action")
}
Run Code Online (Sandbox Code Playgroud)

  • 仅当 UIBarButtonItem 不使用自定义视图时,这才有效。 (3认同)

ser*_*enn 11

如果你需要在你的代码中有足够的时间,那么继续前进并扩展UIBarButtonItem我在Swift下面所做的事情是很好的.:)

import UIKit

extension UIBarButtonItem {
    func addTargetForAction(target: AnyObject, action: Selector) {
        self.target = target
        self.action = action
    }
}
Run Code Online (Sandbox Code Playgroud)

例如,将self作为a UIViewController,您只需调用:

self.myBarButtonItem.addTargetForAction(self, action: #selector(buttonPressed(_:))
Run Code Online (Sandbox Code Playgroud)


sin*_*h99 7

  UIBarButtonItem *barListBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemAdd target:self action:@selector(getTruckStopListAction)];   
    self.navigationItem.rightBarButtonItem = barListBtn;
    [barListBtn release];
Run Code Online (Sandbox Code Playgroud)