2011-07-25 15 views
5

Manzaradayken viewController'ı bir viewController eklerken, manzara görünümünde, bazı görünümlerde değil, bazı görünümlerde başlık görünümü görünür. yani: Bir navigasyon kontrol cihazım var, 3 tane view kontrolörü ekledim, ilk iki show titleview uygun şekilde, üçüncü bir tane hiç göstermiyor. Ancak navigasyon denetleyicisi, ViewController'dan başlığını aldığı gibi yakalar, konsola değerini yazdım ve bu doğru, fakat ekranda ne olursa olsun ekranda görünmüyor. Herhangi bir fikir?UINavigationController TitleView ViewController'den görüntülenmiyor NavigationItem

Oh evet, dikey yönde çalışırken mükemmel çalışır.

Burada başka bir eğlenceli bölüm, eğer manzara görünümünde gezinme denetleyicisini gezinti denetleyicisine itmekteyim, titleView orada değil, herhangi bir kullanıcı etkileşimi olmadan, aygıtı tekrar dikey olarak döndürürüm ve titleView görünür; cihaz manzaraya geri dönüyor ve kalıyor!

Bu, InvokeOnMainThread kullanmış olmama rağmen TitleView'imin çiziminin engellenmesi gibi. Bu çağrı sırasında hiçbir şey ana iş parçasında (veya bu konuyla ilgili herhangi bir yerde) çalışmıyor.

Window 
    TabBarController 
    NavigationController 
     ViewController 
    NavigationController 
     ViewController 

İşte operasyonların siparişim var: Burada

benim yapısı var

  1. View Controller oluştur
  2. kontrolörünü görüntülemek için Başlık görünümü ekle
  3. itin NavigationController üzerine View Controller (InvokeOnMainThread)
+0

Neden iki nav denetleyicisini tek bir Window TabBarController NavigationController ViewController kullanacak kadar kullanıyorsunuz? Sonra başka bir viewcontroller oluşturup daha sonra ona itin –

+0

Her bir gezinme denetleyicisi, her bir farklı sekme için gösterilen farklı bir arabirimi temsil eder. Her sekme için sadece bir navigasyon denetleyicisi kullanın. –

+0

burada 3tabs.so için iki nav denetleyicisi oluşturmuşsunuzdur. Son bir –

cevap

4

Denetleyici basıldıktan sonra denetleyici başlığını ayarlamayı denediniz mi? bu tür bir davranış başlığı aşağıdaki şekilde viewDidLoad veya viewWillAppear yönteminde navbar başlık zorunlu setine olduğunu görünür emin olmak benim ve yol olur:

self.navigationController.navigationBar.topItem.title = @"The title"; 

veya

self.navigationItem.title = @"The Title"; 

Diğer şeyi o bana oldu, viewDidLoad yönteminde başarılı olmaksızın bir gezinti çubuğunun leftBarButton veya RightBarButton'unu ayarlamak, ancak viewWillAppear yöntemindeki çubuk düğmelerini ayarlarken doğru şekilde görünecektir.

Bu yardımcı olur umarım.

+0

Gerçekten de zamanlama GERÇEKTEN önemli gibi görünüyor. Gezinme görünümü temsilcisinin "willShowViewController" öğesinde "titleView" ayarlıyordum ve sol ve sağdaki öğeler tamamken "titleView" titriyor ve kayboluyordu. Şimdi doğrudan geçersiz kılınmış "pushViewController" yöntemine ayarlıyorum. – Rivera

+0

ViewWillAppear yönteminde self.navigationItem.title ayarı benim için hile yaptı. ViewDidLoad üzerinde çalışmıyor – apinho

0

Sorununuzu belki de işleviniz çağrıldığında, gezinme öğesinin sıfır olduğunu düşünüyorum. Yani, self.navigationITem.title çağırdığınızda, hiçbir şey yapmaz. Daha sonra, görünüm döndürüldüğünde, navigationItem artık sıfır değildir, böylece başlık çalışması değiştirilir.

Kodu ViewDidLoad işlevinde yaparsanız, ViewDidLoad öğesinin, ilk kez görünümü görüntülendiğinde viewController.view işlevini çağırdığında ilk kez arandığından emin olun. Bu yüzden görünüm henüz bir navigasyon denetleyicisinde olmayabilir.

Örneğin, bu bunu yaparsanız happend yapabilirsiniz: kontrolör henüz NavigationController içinde olmasa bile

viewController.view.backgroundColor = ... ; 
[navigationController pushViewController:viewController] 

ilk satır viewDidLoad arayacak.