まず、なぜUIBarButtonItem
にアクセスする必要がありますか?
カスタムビューでUIBarButtonItem
を作成するには、次のようなカテゴリ拡張を作成することをお勧めします(この場合、カスタムビューはUIButton
です)。
//UIBarButtonItem+Extension.h
+ (UIBarButtonItem*)barItemWithImage:(UIImage*)image title:(NSString*)title target:(id)target action:(SEL)action;
//UIBarButtonItem+Extension.m
+ (UIBarButtonItem*)barItemWithImage:(UIImage*)image title:(NSString*)title target:(id)target action:(SEL)action
{
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0.0, 0.0, image.size.width, image.size.height);
button.titleLabel.textAlignment = UITextAlignmentCenter;
[button setBackgroundImage:image forState:UIControlStateNormal];
[button setTitle:title forState:UIControlStateNormal];
[button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem* barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
return [barButtonItem autorelease];
}
このような用途それ(第UIBarButtonItem+Extension.h
をインポート):セレクタは、それがバーボタン項目ことを使用するクラス(ターゲット)内に実装される方法だ
UIBarButtonItem* backBarButtonItem = [UIBarButtonItem barItemWithImage:[UIImage imageNamed:@"YoutImageName"] title:@"YourTitle" target:self action:@selector(doSomething:)];
。
今、あなたは以下の可能性がdoSomething:
セレクタ内側:
- (void)doSomething:(id)sender
UIButton* senderButton = (UIButton*)sender;
[popover presentPopoverFromRect:senderButton.bounds inView:senderButton...];
}
カテゴリこの場合には、それはコードを複製しないように便利です。それが役に立てば幸い。
P.S.私はARCを使用していませんが、同じ考慮事項を適用することもできます。
編集:
バーボタンアイテムにアクセスするための簡単な解決策は、以下のようになります。UIButton
が、その中にタイプUIBarButtonItem
(弱いもののプロパティを作成します
- サブクラス保持期間を避けるため)
- 作成時に
UIButton
のバーボタン項目を注入します。
多分それはうまくいくかもしれませんが、私は最初のものを好むでしょう。
あなたは男です!私はUIToolBarを使っているのでNavigationItemsをテストすることができませんでした。これはとてもうまくいきます!ありがとうございました! – scooter133