Ios 如何在运行时为UIBarButtonItem设置目标和操作
已尝试此操作,但仅适用于UIButton:Ios 如何在运行时为UIBarButtonItem设置目标和操作,ios,objective-c,iphone,swift,uibarbuttonitem,Ios,Objective C,Iphone,Swift,Uibarbuttonitem,已尝试此操作,但仅适用于UIButton: [btn setTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside]; 直接设置UIBarButtonItem的目标和操作属性。我遇到了类似的问题。。。我想你的意思是,如果你的UIButton不是你的UITabBar的一部分,那么它可以正常工作。如果这是您提出的问题,请检查您的btnClicked方法并将其更改为: -btnCli
[btn setTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
直接设置UIBarButtonItem的
目标
和操作
属性。我遇到了类似的问题。。。我想你的意思是,如果你的UIButton不是你的UITabBar的一部分,那么它可以正常工作。如果这是您提出的问题,请检查您的btnClicked方法并将其更改为:
-btnClicked:(id)sender
到
然后在头文件中声明btnClicked
值得一提的是,我在TabbarButtonim中设置了一个按钮:
UIBarButtonItem *exampleButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"button.png"] style:UIBarButtonItemStylePlain target:self action:@selector(btnClicked:)];
您可能需要尝试addTarget方法。UIBarButtonItem没有相同的addTarget方法,因此您必须按如下方式直接设置它们
UIBarButtonItem *barListBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemAdd target:self action:@selector(getTruckStopListAction)];
self.navigationItem.rightBarButtonItem = barListBtn;
[barListBtn release];
btn.target = self;
btn.action = @selector(barButtonCustomPressed:);
如果以编程方式添加UIBarButtonim,设置目标和操作的最佳方法是使用以下方法之一初始化按钮:
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)#>
UIBarButtonItem*customButton=[[UIBarButtonItem alloc]initWithImage:style:target:action:
UIBarButtonItem*customButton=[UIBarButtonItem alloc]initWithTitle:style:target:action:
UIBarButtonItem*customButton=[UIBarButtonItem alloc]initWithImage:LandscapeMagePhone:style:target:action:
如果您在代码中需要足够多的时间,可以继续扩展uibarbuttoneim
,我在下面的Swift中已经完成了这项工作。:)
例如,使用self作为UIViewController
,您只需调用:
self.myBarButtonItem.addTargetForAction(self, action: #selector(buttonPressed(_:))
@wp42今天确实有用 在objective-C中,一种巧妙的方法是向UIBarButtonItem类添加一个类别: .h文件
#import <UIKit/UIKit.h>
@interface UIBarButtonItem (addons)
-(void)addTarget:(id)target andAction:(SEL)action;
@end
实际上:
[myBtn addTarget:self andAction:@selector(myFunction:)];
设置
uibarbuttoneim的目标
和操作
Swift 5&4
button.target = self
button.action = #selector(action)
@objc func action (sender:UIButton) {
print("action")
}
Swift 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!")
}
向该工厂添加新按钮非常容易。对于自定义视图:使用UITappestureRecognitizer
并将isUserInteractionEnabled
设置为true
profileImageView.isUserInteractionEnabled = true
let tap = UITapGestureRecognizer(target: self, action: #selector(handleProfileImageTap))
profileImageView.addGestureRecognizer(tap)
navigationItem.leftBarButtonItem = UIBarButtonItem(customView: profileImageView)
此外,您还可以取出“:”making…:@selector(btnClicked:)];进入…:@selector(btnClicked)];注意:这仅在UIBarButtonItem
不使用自定义视图时有效,如UIButton
对于自定义视图,请使用:[按钮添加目标:自我操作:@selector(buttonPressed)forControlEvents:UIControlEventTouchUpInside];你能举个例子说明这些应该设置成什么吗?目标说它需要一个AnyObject?是否应该将其设置为UIGestureRecognitor?假设btn是UIBarButtonItem,[btn setTarget:self];[btn setAction:@selector(btnClicked:)]或点符号btn.target=self;btn.action=@selector(btnClicked:);两者都应该像@Ole Begemann所描述的那样工作。根据文档,这不适用于使用自定义视图初始化的实例。“此方法创建的条形按钮项不调用其目标的操作方法来响应用户交互。相反,条形按钮项希望指定的自定义视图处理任何用户交互并提供适当的响应。”请参阅以获取即使对UIButton也无效的引用。对于UIButton,正确的方法是-addTarget:action:forControlEvents:
UIBarButtonItem没有addTarget方法。该方法不存在,请检查文档:您想的是UIButtonThank!!这正是我实现自定义UIBarButtonim类所需的内容伟大的答案,特别是如果您希望在设计时创建按钮!这仅在UIBarButtonItem不使用自定义视图时有效。
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!")
}
profileImageView.isUserInteractionEnabled = true
let tap = UITapGestureRecognizer(target: self, action: #selector(handleProfileImageTap))
profileImageView.addGestureRecognizer(tap)
navigationItem.leftBarButtonItem = UIBarButtonItem(customView: profileImageView)