2010-12-28 6 views
0

私はこれをすべてのuitableviewcontrollerで行います。グローバル機能

self.navigationController.navigationBar.tintColor= [UIColor blueColor]; 
UIImageView *headerView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"imageName"]]; 
self.navigationItem.titleView = headerView; 

私にこれを行うカスタムクラスを作成する方法はありますか?私はこれを取得、なぜメンバーのリクエスト「navigationBar」何かない構造体または共用

に私が知っているが、そこにある。このよう

[StyleDefaults setNavStyles]; 

@implementation StyleDefaults 

+(void) setNavStyle { 

    self.navigationController.navigationBar.tintColor= [UIColor blueColor]; 
    UIImageView *headerView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:kheader]]; 
    self.navigationItem.titleView = headerView; 

} 

@end 

と同じように私はこのエラーを取得しますこの問題を回避するには?

ありがとうございます。

答えて

3

このコードを別のクラスに移動すると、selfはもはやUITableViewControllerではなくなりました。UITableViewControllerへの参照をメソッドに渡して、そのナビゲーションプロパティにアクセスできるようにします。

タイプのUIViewControllerのパラメータを追加します(UITableViewControllersはそれらのサブクラスです)とパラメータでselfを置き換える:

+(void) setNavStyle:(UIViewController *)viewController {  
    viewController.navigationController.navigationBar.tintColor= [UIColor blueColor]; 
    UIImageView *headerView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:kheader]]; 
    viewController.navigationItem.titleView = headerView; 
} 

次に、このようなUITableViewControllersからメソッドを呼び出します。

[StyleDefaults setNavStyle:self]; 
+0

カテゴリよりもはるかに優れた解決策です。 – bbum

1

私は考えこのタスクのカテゴリを使用することを推奨します。 See this tip on MacDeveloper
あなたのインターフェイスは、次のようになります。

@interface UIViewController (myDefaultStyle) 
-(void) setupMyStyle; 
@end 

と実装は次のようになります。今

@implementation UIViewController (myDefaultStyle)  

-(void) setupMyStyle { 

    self.navigationController.navigationBar.tintColor= [UIColor blueColor]; 
    UIImageView *headerView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:kheader]]; 
    self.navigationItem.titleView = headerView; 

} 

あなたは、実際のビューコントローラで行う必要があると思いますすべてがカテゴリをインポートし、それは意味があるところで[self setupMyStyle]に電話してください。
自己への参照を静的関数に渡すのと同じ目的を果たしますが、それはより明確なコードであり、より高速なノッチでさえあります。

+2

**カテゴリを使用しない**または、もしあなたが本当に本当にその道を踏み出そうとしているのであれば、**あなたのメソッドの前に常にユニークな**を付けてください。そのメソッドをカテゴリに追加すると、そのクラスとサブクラスのすべてのインスタンスがそのメソッドに応答します。既存のメソッド(または今後提供されるメソッド)と同じメソッド名を指定した場合、アプリケーションは不思議な方法で破損します。 – bbum

関連する問題