1

アプリケーション全体で UINavigationController の戻るボタンを置き換えようとしています。私の要件は、この戻るボタンを 1 つの XIB で定義し、可能であればそれを設定するコードを 1 つの場所に配置することです。

プロパティをビューとしてカスタムボタンを持つ UIBarButtomItem に設定するさまざまなメソッドを見てきました。self.navigationItem.backBarButtonItem[[UIBarButtonItem alloc] initWithCustomView:myButton];

私が最初に考えたのは、すべての UINavigationControllers に「ViewDidLoad」を実装し、このプロパティを設定するグローバル カテゴリを作成することでした (それが用語かどうかはわかりません。ご想像のとおり、私は Objective-C を初めて使用します)。私の問題は、実行時に作成したこのボタンに XIB をロードすることです。

これを行うためのきちんとした方法について提案がある人はいますか (それは一般的なことだと思います。すべての画面でコードを繰り返すことは想像できません)。サブクラスの作成を検討しましたがUINavigationController、これが ViewDidLoad のカスタム実装にどのように影響するかわかりませんでした。

アドバイスをいただければ幸いです。また、iOS4 以上をターゲットにする必要があります (外観 API は iOS5 のみです)。

4

2 に答える 2

4

可能な限り継承を強制しないことを好むので、2 つのカテゴリでこれを行うことができます

@interface UIViewController (backButtonAdditions)

- (void)ps_addBackbutton;

@end

@implementation UIViewController (backButtonAdditions)

- (void)ps_addBackbutton;
{
    // add back button
}

@end

@interface UINavigationController (backButtonAdditions)

- (void)ps_pushViewController:(UIViewController *)viewController animated:(BOOL)animated;

@end

@implementation UINavigationController (backButtonAdditions)

- (void)ps_pushViewController:(UIViewController *)viewController animated:(BOOL)animated;
{
    [viewController ps_addBackbutton];
    [self pushViewController:viewController animated:animated];
}

@end

これら#importのファイルを適切に使用する代わりに

[self.navigationController pushViewController:aViewController YES];

使用する

[self.navigationController ps_pushViewController:aViewController YES];

免責事項

ブラウザでこれを自由にスタイル設定したので、微調整する必要があるかもしれません

于 2012-04-05T10:58:51.323 に答える
0

I had the same issue in my current project, the solution I came up with was to create a MYBaseViewController base class without xib and there in viewDidLoad programmatically (if you want to init barButtonItem with custom view, you are not able to create in xib anyways) create a customBackButton (and of course release it and set to nil viewDidUnload.

This works good for me because this way I can create xibs for all my other viewControllers that are subclasses of MYBaseViewController(if you created a view for base class in nib you would not be able to create a nib for a subclass).

于 2012-04-05T10:38:54.093 に答える