Как я могу изменить фоновое изображение для моего NavigationBar для каждой страницы? - PullRequest
3 голосов
/ 14 августа 2010

Я искал способ изменить фоновое изображение моего NavigationBar и контролировать внешний вид моего NavigationBar, когда пользователь перемещается по приложению.

Я понимаю, что принятый подход для изменения фонового изображения:

@implementation UINavigationBar (UINavigationBarCategory)

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

@end

Однако это меняет внешний вид NavigationBar во всем приложении. Как я могу изменить фоновое изображение NavBar при переходе пользователя от одного вида к другому?

Заранее спасибо за помощь!

Ответы [ 5 ]

2 голосов
/ 15 августа 2010

Вам необходимо установить какое-либо состояние для текущей страницы или подходящего в данный момент изображения, которое можно использовать, вероятно, в каждом из ваших viewWillAppear: методов.Затем измените указанную выше функцию drawRect: для ссылки на это состояние.

Чтобы вызвать перерисовку панели, вызовите [myNavigationBar setNeedsDisplay] при обновлении состояния.Это приведет к вызову drawRect.

1 голос
/ 22 сентября 2011

Я бы очень рекомендовал прочитать урок от Себастьяна Селиса, он мне очень помог - http://sebastiancelis.com/2009/12/21/adding-background-image-uinavigationbar/

0 голосов
/ 14 августа 2013

Вы можете использовать этот код в любом месте вашего приложения (вызовите метод в viewWillAppeare :), вызвав метод для изменения изображения панели навигации.Если Вы вызываете метод в didFinishLanch, значит, изображение панели навигации установлено на все приложение.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  [[UIDevice currentDevice] systemVersion];
    if ([[[UIDevice currentDevice] systemVersion] floatValue] > 4.9)
    {
        [self customizeAppearance];
    }

}

- (void)customizeAppearance
{
    UIImage *navbarimage = [[UIImage imageNamed:@"blckapplication_bar.png"]resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0,0,0)];
    [[UINavigationBar appearance] setBackgroundImage:navbarimage forBarMetrics:UIBarMetricsDefault];

    // Create resizable images    
    // Set the background image for *all* UINavigationBars
}
0 голосов
/ 14 августа 2013

Я полагаю, что это первый фактический ответ на этот вопрос для iOS5, основной проблемой является «удаление» фонового изображения, как только вы закончите.Ну, просто сохраните существующее изображение и верните его обратно, когда закончите.

@implementation MyViewController {
    UIImage *_defaultImage;
}

- (void)viewWillAppear:(BOOL)animated {   
    _defaultImage = [self.navigationController.navigationBar backgroundImageForBarMetrics:UIBarMetricsDefault];
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"bar.png"] forBarMetrics:UIBarMetricsDefault];
}

- (void)viewWillDisappear:(BOOL)animated {
    [self.navigationController.navigationBar setBackgroundImage:_defaultImage forBarMetrics:UIBarMetricsDefault];
}
0 голосов
/ 14 августа 2010

нельзя ли использовать вид изображения (добавить) на панели навигации?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...