0

すべてのViewControllerに同じコードがあり、ViewControllerのビューの背景色を設定し、navbaritemの戻るボタンとtitleviewを変更します。これを回避する方法はありますか?

UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 37, 24)];
[button setImage:[UIImage imageNamed:@"Navbar_BackButton.png"] forState:UIControlStateNormal];
[button addTarget:self action:@selector(backButtonTabbed:) forControlEvents:UIControlEventTouchDown];
[button setImageEdgeInsets:UIEdgeInsetsMake(0, 0, 0, -10)];
UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:button];

[navbarItem setLeftBarButtonItem:barButton];

[navbarItem setTitleView:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Navbar_Title.png"]]];

[[self view] setBackgroundColor:[[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"Login_Background.png"]]];
4

3 に答える 3

4

サブクラス化に最適なケースです。

UIViewControllerコードを実行するメソッドをオーバーライドするサブクラスを作成し、viewDidLoadそのような動作を必要とする他のすべてのビュー コントローラーをそのサブクラスにします。

于 2012-12-28T15:50:58.637 に答える
1

2 つのオプションがあります。

1) すべてのビュー コントローラーの拡張元となる共通の基本クラスを作成します。欠点は、おそらく 2 つが必要になることUIViewControllerですUITableViewController。これら 2 つのクラスに、この共通コードを配置します。

2) すべての から呼び出す「ヘルパー」クラスを作成しますviewDidLoad。every に 1 行のコードを追加する必要がありますviewDidLoadが、少なくとも 1 行だけです。色などを変更する必要がある場合は、すべてのビュー コントローラーではなく、1 つのクラスのみを変更します。

于 2012-12-28T15:51:40.817 に答える
1

これは、オブジェクト指向プログラミングにおける継承の力の完璧な例です!

ベース ビュー コントローラーとして機能する のサブクラスを作成しUIViewControllerます (BaseViewController と呼ぶこともできます)。

次に、他のすべてのビュー コントローラーを、 ではなく、このベース ビュー コントローラーのサブクラスにしますUIViewController。これらのサブクラスは を呼び出すため[super viewDidLoad]、ベース ビュー コントローラーのviewDidLoadメソッドのコードを継承します。これには、外観コードが含まれている必要があります。

于 2012-12-28T15:52:08.563 に答える