2012-05-08 9 views
6

navigasyon kontrolörü geri düğmesinin arka plan, ama gerçekten onunla eşleşecek şekilde şeffaf, geri düğmesini arka plan rengini değiştirmek için mücadele ediyorum altındaki yeşil başlık çubuğu. IOS geliştirmede oldukça yeni. Herhangi biri ne yapılabileceğini önerebilir mi?ios 5 değişiklik ben bir arka plan resmiyle gezinti kontrol başlık çubuğunu özelleştirmiş şeffaf

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) { 
     UIImage *image = [UIImage imageNamed:@"greenbar.png"]; 
     [self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault]; 
     // [[UIBarButtonItem appearance] setBackButtonBackgroundImage:image forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

    } 

    //change back button image 

} 

DÜZENLEME: Burada

ihtimale yardımcı olur, ben navigasyon denetleyicisi başlık çubuğunu değiştirmek için kullanılan kodudur ne istediğini başardı biraz araştırma yaptıktan sonra . İşte sırt düğme için arka plan görüntüsünü değiştirmek için koddur:

UIImage *image1 = [UIImage imageNamed:@"back-bt.png"]; 
    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:image1 forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

Yukarıdaki kod navigasyon kontrolörü tüm geri düğmeleri görüntüyü ekler.

+0

Gezinme denetleyicisi bir popover denetleyicisinde sunulduğunda çözümünüz çalışmaz. Bunun nedeni popover navigasyon çubuğunun arka plan ve arka çubuğu düğmesi öğesinin arka plan farklı çizilmiş olmasıdır. –

cevap

5

varsayılan geri düğmesi görünümünü değiştiremez, ama bunu değiştirmek için kendi düğme oluşturabilirsiniz.

- (void)viewDidLoad { 

    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) { 
     UIImage *image = [UIImage imageNamed:@"greenbar.png"]; 
     [self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault]; 
     // [[UIBarButtonItem appearance] setBackButtonBackgroundImage:image forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

    } 

    //change back button image 
    if(self.navigationController.viewControllers.count > 1) { 
     UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; 

     [backButton setTitle:@"Back" forState:UIControlStateNormal]; 
     [backButton addTarget:self action:@selector(didTapBackButton:) forControlEvents:UIControlEventTouchUpInside]; 
     backButton.frame = CGRectMake(0.0f, 0.0f, 64.0f, 41.0f); 
     UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton]; 

     self.navigationItem.leftBarButtonItem = backButtonItem; 
    } 
} 



- (void) didTapBackButton:(id)sender { 
    if(self.navigationController.viewControllers.count > 1) { 
     [self.navigationController popViewControllerAnimated:YES]; 
    } 
} 
+0

Cevabınız için teşekkürler! Çalışıyor, ama sadece bir seviye için derin ve her görünüm için değil. Ama başka bir yolu yok mu? Teşekkürler! –

+3

bildiğim başka yolu. tüm görünüm denetleyicileri bu eklemek istiyorsanız 'viewDidLoad' yöntemi bu uygular ve uygulamadaki tüm görünümünüzü denetleyicileri için bir temel sınıf olarak kullanmak bir' BaseViewController' sınıf oluşturmak. '[Süper viewDidLoad]' çağırmak için ana görünümü denetleyicileri içinde viewDidLoad geçersiz kılmak için Sadece dikkatli olun. – adig

+0

teşekkürler! Onun yararlı! –

İlgili konular