web-dev-qa-db-ja.com

UIBarButtonItem UINavigationBarのカスタムビュー

Uinavigationbarのカスタムバーボタンを作成しています。次のコードを使用しています

 UIImageView *backImgView= [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"chk_back.png"]]; [backImgView setUserInteractionEnabled:YES];
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithCustomView:backImgView];
[backButton setTarget:self];
[backButton setAction:@selector(BackBtn)];
checkIn_NavBar.topItem.leftBarButtonItem = backButton;

問題は、その行動を呼び起こしていないことです。私は何を間違っていますか?

18
Hassy

Appleドキュメント:から
指定されたカスタムビューを使用して、新しいアイテムを初期化します。

- (id)initWithCustomView:(UIView *)customView

パラメータcustomViewアイテムを表すカスタムビュー。戻り値指定されたプロパティで新しく初期化されたアイテム。

ディスカッション:このメソッドによって作成されたバーボタンアイテムは、ユーザーインタラクションに応じてターゲットのアクションメソッドを呼び出しません。代わりに、バーボタンアイテムは、指定されたカスタムビューがユーザーインタラクションを処理し、適切なレスポンスを提供することを期待します。

解決策:「背景画像を使用してボタンを作成し(このボタンにアクションを設定)、このボタンを使用して初期化バーボタンを作成します。例えば:

UIButton *btn =  [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(0,0,25,25)
[btn setBackgroundImage:[UIImage imageNamed:@"chk_back.png"] forState:UIControlStateNormal];
[btn addTarget:self action:@selector(BackBtn) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *barBtn = [[UIBarButtonItem alloc] initWithCustomView:btn];
45
UIBarButtonItem *graphButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"GraphButton.png"]
                                                                    style:UIBarButtonItemStyleBordered
                                                                   target:self
                                                                   action:@selector(graphButton)];
self.navigationItem.rightBarButtonItem = graphButton;

- (void)graphButton{
}
1
brianLikeApple

私は次のコードを使用してこれを達成しました:

UIButton *nxtBtn =  [UIButton buttonWithType:UIButtonTypeCustom];
[nxtBtn setImage:[UIImage imageNamed:@"chk_next.png"] forState:UIControlStateNormal];
[nxtBtn addTarget:self action:@selector(NextBtn) forControlEvents:UIControlEventTouchUpInside];
[nxtBtn setFrame:CGRectMake(0, 0, 64, 31)];
UIBarButtonItem *nextButton = [[UIBarButtonItem alloc] initWithCustomView:nxtBtn];

checkIn_NavBar.topItem.rightBarButtonItem=nextButton;
1
Hassy