私のアプリケーションでは、UIViewControllers
とUINavigationControllers
がたくさんあります。 UIButton
には「戻る」ボタンと「ホーム」UINavigationBar
が必要です。これはすべて正常に機能します。
しかし、私のUIViewControllers
の中には長い名前が付いているものがあり、場所が小さすぎる場合があります。 「戻る」ボタンの元のラベル(前のビューのタイトルが表示されます)をカスタムの「戻る」に置き換えようとしていますが、試しても機能しませんでした。
// Title didn't change
[self.navigationItem.backBarButtonItem setTitle:@"Back"];
// Action didn't set, no response from button ( button didn't do anything )
[self.navigationItem.leftBarButtonItem
setAction:self.navigationItem.backBarButtonItem.action];
そして、私はこの質問のようなスタイルを持つために「戻る」ボタンが必要です:iPhoneナビゲーションバーにカスタムの戻るボタンを描く
これを試して
UIBarButtonItem *backBarBtnItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(popViewController)];
[self.navigationItem setBackBarButtonItem:backBarBtnItem];
- (void)popViewController
{
[self.navigationController popViewControllerAnimated:YES];
}
次のことを試してください。それは間違いなく機能します:
- (void)viewDidLoad {
[super viewDidLoad];
UIImage *buttonImage = [UIImage imageNamed:@"back.png"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:buttonImage forState:UIControlStateNormal];
button.frame = CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height);
[button addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithCustomView:button];
self.navigationItem.leftBarButtonItem = customBarItem;
[customBarItem release];
}
- (void)back {
[self.navigationController popViewControllerAnimated:YES];
}
リソースフォルダにback.png
という名前のナビゲーションバーの戻るボタンのサイズのボタン画像があることを確認してください。
その他の支援が必要な場合は、お気軽に。
ターゲット:UINavigationBarのすべての戻るボタンを白いアイコンにカスタマイズする
ステップ:1。AppDeleteの「didFinishLaunchingWithOptions」メソッドで:
UIImage * backBtnIcon = [UIImage imageNamed:@ "navBackBtn"];
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) {
[UINavigationBar appearance].tintColor = [UIColor whiteColor];
[UINavigationBar appearance].backIndicatorImage = backBtnIcon;
[UINavigationBar appearance].backIndicatorTransitionMaskImage = backBtnIcon;
}else{
UIImage *backButtonImage = [backBtnIcon resizableImageWithCapInsets:UIEdgeInsetsMake(0, backBtnIcon.size.width - 1, 0, 0)];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -backButtonImage.size.height*2) forBarMetrics:UIBarMetricsDefault];
}
2.一般的なスーパーViewControllerクラスの「viewDidLoad」メソッドで:
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) {
UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:@""
style:UIBarButtonItemStylePlain
target:nil
action:nil];
[self.navigationItem setBackBarButtonItem:backItem];
}else{
//do nothing
}
私のようにいたるところでこれを行っている場合は、Anilのソリューションをカテゴリとして実装することをお勧めします。
@interface UIViewController (CustomBackButton)
- (void) setCustomBackButton;
- (void) back;
@end
@implementation UIViewController (CustomBackButton)
- (void) setCustomBackButton
{
UIImage *buttonImage = [UIImage imageNamed:@"back.png"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:buttonImage forState:UIControlStateNormal];
button.frame = CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height);
[button addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithCustomView:button];
self.navigationItem.leftBarButtonItem = customBarItem;
}
- (void) back
{
[self.navigationController popViewControllerAnimated:YES];
}
@end
もっと簡単に:
UIBarButtonItem *barBtnItem =
[[UIBarButtonItem alloc]initWithTitle:@"Indietro"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(pop)];
[barBtnItem setTintColor:[UIColor whiteColor]];
self.navigationItem.leftBarButtonItem = barBtnItem;
Controller1とController2の2つのコントローラーがあるとします。 Controller2はController1からプッシュされます。したがって、Controller1からnavigationControllerのController2をプッシュする前に
Controller2 *controller2 = [[[Controller2 alloc] init]autorelease];
self.navigationItem.hidesBackButton = YES;
ここで、Controller2のviewDidLoad:メソッドに、次のスニペットを追加します
UIBarButtonItem *backBarButtonItem =[[[UIBarButtonItem alloc]initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(goBackToAllPets:)]autorelease];
self.navigationItem.leftBarButtonItem = backBarButtonItem;
また、backButtonClickedメソッドでは、必要なチェックを実行できます。