UINavigationItem leftBarButton скрыт за фоном - PullRequest
0 голосов
/ 05 апреля 2011

У меня есть UINavigationBar с пользовательским фоном и моей собственной кнопкой возврата. Чтобы сделать это, я сделал следующее.

//custom background
UIImageView *background = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"navigation-bar.png"]] autorelease];
[self.navigationController.navigationBar insertSubview:background atIndex:0];

//custom back button
UIImage *buttonImage = [UIImage imageNamed:@"btn_back.png"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:buttonImage forState:UIControlStateNormal];
button.frame = CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height);
[button addTarget:self action:@selector(backPressed:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithCustomView:button];
self.navigationItem.leftBarButtonItem = customBarItem;
[customBarItem release];

Кнопка «Назад» работает всегда, но ее можно увидеть только в том случае, если я не применяю свой собственный фон. Может ли кто-нибудь указать, как добиться того и другого?

Спасибо заранее. Рикки.

Ответы [ 2 ]

1 голос
/ 05 апреля 2011

Вы можете установить фоновое изображение панели навигации с помощью этого

@implementation UINavigationBar (UINavigationBarCategory)

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx 
{
    if([self isMemberOfClass:[UINavigationBar class]])
    {
        UIImage *image;


        image=[UIImage imageNamed:@"nav_bar_img"];


        CGContextClip(ctx);
        CGContextTranslateCTM(ctx, 0, image.size.height);
        CGContextScaleCTM(ctx, 1.0, -1.0);
        CGContextDrawImage(ctx,
                           CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), image.CGImage); 
    }
    else 
    {        
        [super drawLayer:layer inContext:ctx];     
    }
}  
@end
0 голосов
/ 07 апреля 2011

В итоге я сделал следующее.

@implementation UINavigationBar (Category)

- (void)drawRect:(CGRect)rect
{
    MyAppDelegate *delegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
    [delegate.navImage drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}

@end

Каждый раз, когда я хочу изменить фон панели, я меняю свойство navImage делегата и вызываю -setNeedsDisplay на панели навигации.

Спасибо за вашу помощь.

...