ナビゲーション コントローラーが実装されているアプリの任意のビューに移動すると、前のビューに戻るための戻るボタンが表示されます。デフォルトのイメージの代わりにカスタム イメージを使用する方法はありますか?
3 に答える
はい、できます。
ナビゲーション項目の戻るバー ボタン項目を設定することで、別のビュー コントローラーが特定のビュー コントローラーの上にプッシュされたときの標準の戻るボタンの外観を制御できます (タイトルをカスタマイズしたり、画像を使用したりできます)。
UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:nil action:nil];
self.navigationItem.backBarButtonItem = btn;
[btn release];
UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithImage:yourImage style:UIBarButtonItemStyleBordered target:nil action:nil];
self.navigationItem.backBarButtonItem = btn;
[btn release];
注:これは、他のView Controllerがその上にプッシュされている可能性のある「親」View Controllerで構成します。構成は「親」で行われ、一部のView Controllerが上にある場合、戻るボタンの外観が変更されます。戻るボタンをタップすると、期待どおりに戻ります。
独自の UIBarButtonItem を作成し、現在のビュー コントローラーのナビゲーション バーの leftButtonItem として設定することもできます。
UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithImage:yourImage style:UIBarButtonItemStyleBordered target:self action:@selector(yourMethod:)];
self.navigationItem.leftBarButtonItem = btn;
[btn release];
注: この場合、現在のビュー コントローラーの戻る/左のバー ボタンの項目が変更されます (上部にある場合)。メソッドを実装する必要がありますyourMethod:
。単純にボタンを元に戻したい場合は、 を呼び出して自分でビュー コントローラーのポップを処理する必要があります[self.navigationController popViewControllerAnimated:YES];
。
実際に BACK UIBarButton を解決したソリューションはなく、View Controller がルートの場合は非表示の動作も提供していないことがわかりました。
-(void)popViewControllerWithAnimation {
[self.navigationController popViewControllerAnimated:YES];
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
if([self.navigationController.viewControllers objectAtIndex:0] != self)
{
UIButton *backButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 26, 26)];
[backButton setImage:[UIImage imageNamed:@"back"] forState:UIControlStateNormal];
[backButton setShowsTouchWhenHighlighted:TRUE];
[backButton addTarget:self action:@selector(popViewControllerWithAnimation) forControlEvents:UIControlEventTouchDown];
UIBarButtonItem *barBackItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
self.navigationItem.hidesBackButton = TRUE;
self.navigationItem.leftBarButtonItem = barBackItem;
}
}
ほとんど戻るボタンのように機能します。トランジション アニメーション (ボタンがタップされ、現在のビューが右側のナビゲーションからポップされた後) を除きます。
正しい方法は、カテゴリを作成することです。
@interface UINavigationBar (MyNavigationBar)
-(void)drawRect:(CGRect)rect;
@end
@implementation UINavigationBar (MyNavigationBar)
-(void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed:@"....."];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];