2012-05-25 25 views
12

Öğreticiyi blogumda yaptım, bu yüzden alt (yığın) viewcontroller'in başlığını görüntüleyebilen, gerilebilir bir düğmenin nasıl yapıldığını biliyorum. Ama yapmayı umduğum şey, simgeleri (HOME için bir ev gibi) ve hiçbir metni içermemekte ve yeniden boyutlandırmamaktır.iOS 5: Bir özel (resim) geri düğmesi nasıl uygulanır

Özel resmim ve bu kodu aşağıda kullanarak, baştan sona (isteksiz) başlık ile uzatılmış bir sürüm (istemiyor) alıyorum ve tıklatıldığında (iyi olduğunda) tonlama/vurgulama yapar; Şimdi

screen shot 1

UIImage *backButtonImage = [UIImage imageNamed:@"backButton_30.png"]; 
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

, burada üzerinde arama ve eski cevapları dönmek ve benim için garip sonuçlar var tüm benzer soruları okudum. İşte denediğim kod;

UIImage *backButtonImage = [UIImage imageNamed:@"backButton_30.png"]; 
    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:backButtonImage style:UIBarButtonItemStyleBordered target:nil action:nil]; 
    self.navigationItem.backBarButtonItem = backButton; 

benim özel resim düğmesini germek değil bu yöntem (iyidir), ne de metin (İstediğimi) Ancak orada o (WTF) kapsamında orijinal mavi düğme hala ve benim özel gösterir butonu tıklandığında ton atmaz, sadece altındaki mavi tuşa basar!

screen shot 2

yardım edin, ne eksik?

* GÜNCELLEME

Ben yeniden boyutlandırılabilir görüntüyü kullanarak onu biraz düzelttik. Bu benim

self.title [email protected]" "; 

Şimdi bu kirli düzeltmenin biraz yapmak zorunda butonuna gösterilmesini başlığı düzeltmek için değil 'streç'

UIImage *backButtonHomeImage = [[UIImage imageNamed:@"backButtonHomeWhite_30.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; 
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonHomeImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

bunu zorlar ama çalışıyor gibi görünüyor . Artık tek sorun, farklı görünümlerde farklı bir geri düğmesi olmasını ve bu yöntemin bazı sorunlara neden olduğunu; düğmeyi belirleyen son görünüm, diğer tüm görünümleri aşar. Sonuç olarak, uygulamada nasıl gezindiğinize bağlı olarak, önceki bir görünüme dönmek yanlış geri düğmesine sahiptir ve hiçbir zaman doğru olana sıfırlanmaz.


GÜNCELLEME 2: POTANSİYEL IDEA:

şu makul bir çözüm olabilir mi, yoksa ara vererek yükümlü olduğu kesmek?

gibi pek düğme geri varsayılan gizlenmesi,

[self.navigationItem setHidesBackButton:YES animated:NO]; 

... sonra aslında arkaya düğmeye yere yerleştirilmiş istediğiniz tarzda bir düğme ile, özel bir UIBarButtonItem kullanarak gönderir Dokunulduğunda UINavigationController'a bir popViewControllerAnimated: mesajı.

Daha sağlam bir çözüm biliyorsanız, lütfen paylaşın, teşekkürler.

+0

Sadece Nitelikler Denetçisinden bunu değiştiremez misiniz? – nemesis

+0

Keşke nasıl bildiğimi anladım ... Hikaye panosunda ilk görüntü denetleyiciyi seçtikten sonra, öznitelik denetçisine gittim ve gezinme öğesinin altında geri düğmesi yazan bir kutu görüyorum, ancak bunun nasıl kullanılacağını bilmiyorum; Resim isminde yazmayı denedim, ancak hiçbir şey yapmıyor gibi görünüyor. Baska öneri? – RobDigital

+0

Bunu çözmek için başka bir yaklaşım var - genel bir düğmeyi gezinti çubuğuna sürükleyip özel görüntüler ve isimlerle oynatabilirsiniz. Umarım bu size yardımcı olur! – nemesis

cevap

13

UIImage *backButtonHomeImage = [[UIImage imageNamed:@"backButtonHomeWhite_30.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; 
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonHomeImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

kalan tek sorun ileri geri görünümler arasında gittiğinizde, çalıştırdığı işe yarayabilir bir yaklaşım olduğunu düğme appeareance güncellemek için nasıl yani, size kabul edilebilir geçerli çözümü olduğunu varsayarsak

- (void)viewWillAppear:(BOOL)animated { 
    UIImage *backButtonHomeImage = [[UIImage imageNamed:@"backButtonHomeWhite_30.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; 
    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonHomeImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
} 

Eğer özel bir UIBarButtonItem sahip olmak için geçerli bir yaklaşımla değil memnun değilseniz, gitmek için yol ile çubuğu düğmesi öğesini başlatılıyor şudur: kontrolörleri viewWillAppear: yöntemin her birinde yukarıdaki kod initWithCustomView:. Bu durumda, örneğin, sizin gibi görüntü ile bir UIImageView belirtebilirsiniz ve çalışması gerekir: Bu yardımcı olur

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithCustomView:[UIImageView ...]]; 

Umut. Hikaye kartlarını kullanıyorsanız, çok kolay.

9

iOS 5+ için [[UIBarButtonItem appearance] setBackButtonBackgroundImage:[UIImage imageNamed:@"someimage.png"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]'u kullanın.

+0

Aslen yayınlandığım gibi, bu zaten denedim ve üstte (istenmediği) başlık ile uzatılmış bir versiyon (istemiyor) aldım. – RobDigital

+1

Resminizin, Apple'ınkiyle aynı yükseklik/genişlikte olması gerekir. Ayrıca resizableImageWithCapInsets: UIEdgeInsetsMake (6, 6, 6, 6)] '[[UIImage imageNamed: @" someimage.png "] kullanarak yeniden boyutlandırılabilir bir görüntü oluşturmak isteyebilirsiniz. Gerçek görüntünün Apple'larla aynı yükseklikte olması gerekir, ancak genişlik yalnızca metne sığması için programatik olarak gerilecek olan ortadaki sol ve sağ kapaklara + 1px sığacak kadar geniş olmalıdır. –

+2

Öneriniz için teşekkürler Andrew, ancak farklı görüntüler ve NO TEXT ile her görünümde farklı özel geri düğmeleri sahip ana sorunu ele almamıştım. – RobDigital

0

yuvarlak bir dikdörtgen düğme çekin ve gezinti çubuğuna yerleştirin. sonra düğmeyi çift tıklayın (ilk önce, sadece çubuk düğmesinin niteliklerini gösterir, ancak iki kez seçerek, tüm özelliklerini, bir UI düğmesinin özelleştirilmesi gibi değiştirebilirsiniz). Bu örnekte

0

UIAppearance kullanımı yoktur.

Kullanmayı denedim: - [UIBarButtonItem initWithCustomView:]. Buradan görünümünüzü, arka plan resminizi ve başlığınızı ekleyebilirsiniz.

3

i bir projede kullanılan bazı kod:

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
UIImage *btnImg = [UIImage imageNamed:@"ButtonRetourInactive"]; 
[btn setImage:btnImg forState:UIControlStateNormal]; 

btn.frame = CGRectMake(0, 0, btnImg.size.width, btnImg.size.height); 
[btn addTarget:self action:@selector(goBack:) forControlEvents:UIControlEventTouchUpInside]; 
self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:btn] autorelease]; 

Not Bu değişiklik, iOS 4 ve 3 aswell üzerinde çalışır.