これを試してみましたが、UIButtonでのみ機能します:
[btn setTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItemのtarget
およびaction
プロパティを直接設定するだけです。
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);
}
同様の問題にぶつかりました... UIButtonがbtnClickedを呼び出すUITabBarの一部ではない場合、適切に動作するということです。これが提案している問題である場合、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:)];
target
のaction
とUIBarButtonItem
を設定します
Swift 5&4
button.target = self
button.action = #selector(action)
@objc func action (sender:UIButton) {
print("action")
}
あなたのコードでこれを十分に必要とするなら、先に進んでUIBarButtonItem
を拡張するのはいいことです。 :)
import UIKit
extension UIBarButtonItem {
func addTargetForAction(target: AnyObject, action: Selector) {
self.target = target
self.action = action
}
}
例として、selfをUIViewController
として、次のように呼び出すだけです:
self.myBarButtonItem.addTargetForAction(self, action: #selector(buttonPressed(_:))
UIBarButtonItem *barListBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemAdd target:self action:@selector(getTruckStopListAction)];
self.navigationItem.rightBarButtonItem = barListBtn;
[barListBtn release];
@ 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:)];
プログラムで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)#>