2011-02-03 6 views
3

私は4つのタブを持つアプリケーションを持っています。各タブはUINavigationControllerです。 4つのUINavigationBarタブは同じように見え、カスタム背景画像、カスタムのBackButton、およびカスタムの右ボタンで機能をトリガーする必要があります。iPhoneカスタムUINavigationBarボタン

それぞれのRootViewControllerではなく、自分のコードでこれらのカスタマイズを1回だけ行いたいと思います。

私は私のappDelegateにこのコードを挿入することにより、カスタムの背景画像を持っているために管理:

@implementation UINavigationBar (CustomImage) 
- (void)drawRect:(CGRect)rect { 
    UIImage *image = [UIImage imageNamed: @"MyNavigationBar.png"]; 
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; 
} 
@end 

しかし、私は戻って、右のボタンをカスタマイズしたり、右ボタンのアクションを指定するために管理していませんでした。

背景画像の場合と同様に、appDelegateでこれを行う方法はありますか?
また、各RootViewControllerでカスタマイズを行う必要がありますか?

答えて

13

viewWillAppear方法

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
UIImage *butImage = [[UIImage imageNamed:@"back.png"] stretchableImageWithLeftCapWidth:10 topCapHeight:10]; 
[button setBackgroundImage:butImage forState:UIControlStateNormal]; 
[button addTarget:self action:@selector(gotoBack:) forControlEvents:UIControlEventTouchUpInside]; 
button.frame = CGRectMake(0, 0, 48, 30); 
UIBarButtonItem *backButton = [[[UIBarButtonItem alloc] initWithCustomView:button] autorelease]; 
self.navigationItem.leftBarButtonItem = backButton; 

で以下のコードを記述し、戻るボタンのアクションイベントを記述します。

-(IBAction)gotoBack:(id)sender 
{ 
    [self.navigationController popViewControllerAnimated:YES]; 
} 
+0

おかげで完全なのproyectのnavigationbar、バーボタン項目を変更しますが、私は、各RootViewControllerにこのコードを記述する必要があります(各NavigationControllerについて)。私が望むのは、私のappDelegateにカテゴリを持つ背景画像のためにしたように、すべてのNavigationControllerに対してコードを一度しか書くことができないようにすることです。 –

+0

その場合、上記のメソッドをカプセル化し、それぞれの適用可能なクラスで呼び出すオブジェクトを作成します。イメージ、セレクター、およびボタンフレームをパラメーターとして渡すことができます。 – user298261

1

Renungasの回答がうまくいきます。

同じコードを4回書きたくない場合は、 は常にUINavigationControllerをサブクラス化できます。

私はちょうど(UITabBarControllerをサブクラス化しながらも...) この解決策を試してみました。

あなたは(前述の例と同じ)here

カスタムコードは次のようになります似例を見つけることができます:あなたはあなたがしなければならないすべてはloadViewメソッドをオーバーライドして、追加で見ることができるように

- (void)loadView { 

     [super loadView]; 

     UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
     [button setImage:[UIImage imageNamed:@"backbutton.png"] forState:UIControlStateNormal]; 
     [button addTarget:self action:@selector(backAction) forControlEvents:UIControlEventTouchUpInside]; 
     [button setFrame:CGRectMake(0, 0, 32, 32)]; 
     self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button]; 

    } 

    - (void)backAction { 

     [self.navigationController popViewControllerAnimated:YES]; 
    } 

popVievControllerセレクタを実行するメソッド 。

幸運を祈る! aplicationDidFinishLaunchingであなたのappdelegateで

3

.....

UIImage *navBG = [UIImage imageNamed:@"barra-logo-centro.png"]; 

[[UINavigationBar appearance] setBackgroundImage:navBG forBarMetrics:UIBarMetricsDefault]; 

//backbutton: 22x30 , [email protected] 

[[UIBarButtonItem appearance] setBackButtonBackgroundImage:[UIImage imageNamed:@"back_button.png"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

[[UIBarButtonItem appearance] setBackgroundImage:[UIImage imageNamed:@"normal_button.png"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

これは

関連する問題