68

试过这个,但只适用于 UIButton:

[btn setTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
4

11 回答 11

109

只需直接设置 UIBarButtonItem 的targetaction属性。

于 2010-02-25T11:41:20.430 回答
27

UIBarButtonItem 没有相同的 addTarget 方法,所以你必须直接设置它们如下

btn.target = self;
btn.action = @selector(barButtonCustomPressed:);

...

// can specify UIBarButtonItem instead of id for this case
-(IBAction)barButtonCustomPressed:(UIBarButtonItem*)btn 
{
    NSLog(@"button tapped %@", btn.title);
}
于 2014-09-11T20:36:59.163 回答
18

设置targetaction你的UIBarButtonItem

斯威夫特 5 & 4

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

@objc func action (sender:UIButton) {
    print("action")
}
于 2017-10-10T12:40:25.093 回答
15

我遇到了类似的问题......我假设你的意思是如果你的 UIButton 不是你的 UITabBar 的一部分来调用 btnClicked 那么它可以正常工作。如果这是您提出的问题,请检查您的 btnClicked 方法并将其更改为:

-btnClicked:(id)sender

-(void) btnClicked:(id)sender

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

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

UIBarButtonItem *exampleButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"button.png"] style:UIBarButtonItemStylePlain target:self action:@selector(btnClicked:)];
于 2010-02-28T04:56:49.187 回答
12

如果您在代码中需要足够多的时间,最好继续扩展UIBarButtonItem我在下面在 Swift 中所做的。:)

import UIKit

extension UIBarButtonItem {
    func addTargetForAction(target: AnyObject, action: Selector) {
        self.target = target
        self.action = action
    }
}

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

self.myBarButtonItem.addTargetForAction(self, action: #selector(buttonPressed(_:))
于 2015-08-11T14:56:52.487 回答
7
UIBarButtonItem *barListBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemAdd target:self action:@selector(getTruckStopListAction)];   
self.navigationItem.rightBarButtonItem = barListBtn;
[barListBtn release];
于 2012-03-14T07:01:57.207 回答
1

@wp42 今天确实有效。

在 Objective-C 中这样做的一个好方法是向 UIBarButtonItem 类添加一个类别:

.h 文件

#import <UIKit/UIKit.h>

@interface UIBarButtonItem (addons)

-(void)addTarget:(id)target andAction:(SEL)action;

@end

.m 文件

#import "UIBarButtonItem+addons.h"

@implementation UIBarButtonItem (addons)

-(void)addTarget:(id)target andAction:(SEL)action{
   [self setTarget:target];
   [self setAction:action];
}

@end

在实践中:

[myBtn addTarget:self andAction:@selector(myFunction:)];
于 2016-09-08T19:58:08.563 回答
1

对于自定义视图:使用 anUITapGestureRecognizer并设置isUserInteractionEnabledtrue.

profileImageView.isUserInteractionEnabled = true
let tap = UITapGestureRecognizer(target: self, action: #selector(handleProfileImageTap))
profileImageView.addGestureRecognizer(tap)
navigationItem.leftBarButtonItem = UIBarButtonItem(customView: profileImageView)
于 2020-11-19T08:38:52.520 回答
0

如果您以编程方式添加 UIBarButtonItem,设置目标和操作的最佳方法是使用以下方法之一初始化按钮:

UIBarButtonItem *customButton = [[UIBarButtonItem alloc] initWithImage:<#(UIImage)#> style:<#(UIBarButtonItemStyle)#> target:<#(id)#> action:<#(SEL)#>

UIBarButtonItem *customButton = [UIBarButtonItem alloc] initWithTitle:<#(NSString *)#> style:<#(UIBarButtonItemStyle)#> target:<#(id)#> action:<#(SEL)#>

UIBarButtonItem *customButton = [UIBarButtonItem alloc] initWithImage:<#(UIImage *)#> landscapeImagePhone:<#(UIImage *)#> style:<#(UIBarButtonItemStyle)#> target:<#(id)#> action:<#(SEL)#>
于 2015-01-06T20:47:31.363 回答
0

斯威夫特 5:

提取到扩展:

extension UIBarButtonItem {

    static func nextBtn(target: AnyObject, action: Selector) -> UIBarButtonItem {
        let title = "Next"
        return button(title: title, target: target, action: action)
    }

    private static func button(title: String, target: AnyObject, action: Selector) -> UIBarButtonItem {
        return UIBarButtonItem(title: title, style: .done, target: target, action: action)
    }

}

调用代码:

navigationItem.rightBarButtonItem = .nextBtn(target: self, action: #selector(rightBarButtonAction))

行动:

@objc func rightBarButtonAction() {
    Swift.print("Button tapped!")
}

很容易向这个工厂添加新按钮。

于 2019-11-05T08:52:31.130 回答
-5

您可能想尝试 addTarget 方法。

于 2010-11-09T10:21:16.130 回答