7

現在、UIAppearance プロキシを使用して iOS アプリのナビゲーション バーの背景画像をカスタマイズしています。通知をトリガーする 2 つの異なるモードを切り替えるためのボタンがあります。この通知により、プロキシを再度使用して背景が別の画像に変更されます。私の問題は、この変更が別のコントローラーに移動して戻ってきたときにのみ表示されることです。コントローラー内のナビゲーション バーを強制的に更新できません。

MainTabBarController でこれを試しました:

- (void) onAppChangedMode: (NSNotification*)notif {

APP_MODE mode = (APP_MODE) [[notif object] integerValue];

// change navigation bar appearance
[[UILabel appearance] setHighlightedTextColor:[UIColor redColor]];
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:(mode == 0 ? @"navbar.png" : @"navbar2.png")] forBarMetrics:UIBarMetricsDefault];
// trying to update
for (UIViewController* vc in self.viewControllers) {
     [vc.navigationController.navigationBar setNeedsDisplay];
}

}

しかし、何も...動作していません。それを達成する方法はありますか?

ありがとう!

4

3 に答える 3

12

ウィンドウからビューを削除して、再度追加するだけです。

for (UIWindow *window in [UIApplication sharedApplication].windows) {
    for (UIView *view in window.subviews) {
        [view removeFromSuperview];
        [window addSubview:view];
    }
}
于 2015-02-02T09:26:44.593 に答える
7

私はちょうど同じ問題を抱えています、このコードはあなたを助けます:

- (IBAction)btnTouched:(id)sender {
    [[UADSwitch appearance]setOnTintColor:[UIColor redColor]];

    // Present a temp UIViewController 
    UIViewController *vc = [[UIViewController alloc]init];
    [self presentViewController:vc animated:NO completion:nil];//"self" is an instance of UIViewController
    [vc dismissViewControllerAnimated:NO completion:nil];
}
于 2013-05-27T07:25:34.717 に答える
0

現在のナビゲーション バーのみの背景画像を変更するには、次のコードを試してください。

[self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];

UIAppearance を変更した後、上記のコードを使用します。これにより、現在のコントローラーのナビゲーション バーが強制的に変更されます。他のコントローラーのナビゲーション バーは、UIAppearance の変更によって処理されます。

于 2013-02-23T00:04:34.107 に答える