ios 4およびios 5の下でNavigationBarの戻りボタンをカスタマイズ
ios 4でナビゲーションバーの戻るボタンをカスタマイズし、実際にleftBarButtonItemをカスタマイズしました.ここでは再利用を容易にするためにクラスを定義しました.
.hファイル
.mファイル
注意、上の backBarBtnは、戻るボタンの背景を定義するリソースファイルです.ここで、戻るボタンの矢印は13ピクセル幅で、リソースピクチャを伸ばして目的の効果を得る必要があります.また、ボタンのframeを定義する際には、まず一定の大きさのフォントが占める幅を取得し、リソースピクチャの幅を加える必要があります.戻りボタンをあまり大きく見せたくない場合は、backBarBtnを提供する必要があります.13画素の右の幅に注意してください.また、私の文字を戻るボタンの矢印の右側に追加したいので、戻るボタンのタイトルを表示するためにlabelを定義しました.
popViewController関数は、戻るボタンの応答イベントです
これにより、戻りボタンをカスタマイズする必要があるクラスに次のコードが追加されます.
上記のコードでは、同じviewControllerができないviewController pushで通過する可能性があるため、戻るボタンのタイトルを定義する際に、前のviewController’s navtionItemのtitleを取得する必要があります.navigationBarのitems is An array of navigation items managed by the navigation bar.が取り出したlastObjectはpush現在viewControllerのviewControllerのnavigationItem's titleです.もちろん、item.titleを直接欲しいタイトルに置き換えることができます.
ios 5では、カスタムリターンボタンが簡単です.たとえば、viewController 1 pushViewControllerはviewController 2を使用しています.viewController 2の戻るボタンをカスタマイズする必要があります.viewController 1のファイルに次のコードを追加するだけです.
.hファイル
#import <UIKit/UIKit.h>
@interface NavBackBarButtonItem : UIButton
- (id)initWithTitle:(NSString *)title;
@end
.mファイル
#import "NavBackBarButtonItem.h"
@implementation NavBackBarButtonItem
- (id)initWithTitle:(NSString *)title
{
self = [super init];
if (self) {
UIImage *backBarBtn = [[UIImage imageNamed:@"backBarBtn"] stretchableImageWithLeftCapWidth:13.0 topCapHeight:0.0];
[self setBackgroundImage:backBarBtn forState:UIControlStateNormal];
UIFont *font = [UIFont systemFontOfSize:13.0f];
CGSize size = [title sizeWithFont:font];
self.frame = CGRectMake(0, 0, size.width + backBarBtn.size.width, backBarBtn.size.height);
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(13, 0, size.width + backBarBtn.size.width - 13, backBarBtn.size.height)];
titleLabel.text = title;
titleLabel.font = font;
titleLabel.backgroundColor = [UIColor clearColor];
titleLabel.textColor = [UIColor whiteColor];
[self addSubview:titleLabel];
[titleLabel release];
}
return self;
}
@end
注意、上の backBarBtnは、戻るボタンの背景を定義するリソースファイルです.ここで、戻るボタンの矢印は13ピクセル幅で、リソースピクチャを伸ばして目的の効果を得る必要があります.また、ボタンのframeを定義する際には、まず一定の大きさのフォントが占める幅を取得し、リソースピクチャの幅を加える必要があります.戻りボタンをあまり大きく見せたくない場合は、backBarBtnを提供する必要があります.13画素の右の幅に注意してください.また、私の文字を戻るボタンの矢印の右側に追加したいので、戻るボタンのタイトルを表示するためにlabelを定義しました.
popViewController関数は、戻るボタンの応答イベントです
- (void)popViewController
{
[self.navigationController popViewControllerAnimated:YES];
}
これにより、戻りボタンをカスタマイズする必要があるクラスに次のコードが追加されます.
UINavigationItem *item = [self.navigationController.navigationBar.items lastObject];
UIButton *backBtn = [[NavBackBarButtonItem alloc] initWithTitle:item.title];
[backBtn addTarget:self action:@selector(popViewController) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *backBarButton = [[UIBarButtonItem alloc] initWithCustomView:backBtn];
self.navigationItem.leftBarButtonItem = backBarButton;
[backBtn release];
[backBarButton release];
上記のコードでは、同じviewControllerができないviewController pushで通過する可能性があるため、戻るボタンのタイトルを定義する際に、前のviewController’s navtionItemのtitleを取得する必要があります.navigationBarのitems is An array of navigation items managed by the navigation bar.が取り出したlastObjectはpush現在viewControllerのviewControllerのnavigationItem's titleです.もちろん、item.titleを直接欲しいタイトルに置き換えることができます.
ios 5では、カスタムリターンボタンが簡単です.たとえば、viewController 1 pushViewControllerはviewController 2を使用しています.viewController 2の戻るボタンをカスタマイズする必要があります.viewController 1のファイルに次のコードを追加するだけです.
UIBarButtonItem *bbtn = [[UIBarButtonItem alloc] initWithTitle:self.navigationItem.title style:UIBarButtonItemStyleBordered target:nil action:nil];
UIImage *backBarBtn = [[UIImage imageNamed:@"backBarBtn"] resizableImageWithCapInsets:UIEdgeInsetsMake(0.0, 13.0, 0.0, 5.0)];
[bbtn setBackButtonBackgroundImage:backBarBtn forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
self.navigationItem.backBarButtonItem = bbtn;
[bbtn release];