2014-10-14 21 views
15

Görünüm denetleyicisini, görünür bir gezinti çubuğuna sahip bir gezinme çubuğuna sahip bir görünüm denetleyicisinden basmaya çalışıyorum. Push/Pop View Denetleyici Gezinme Çubuğu Olmadan View Controller'dan Gezinme Çubuğuyla

Ben

// First View Controller 

@implementation FirstViewController 

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    [[self navigationController] setNavigationBarHidden:YES animated:NO]; 

    NSLog(@"[%@ viewWillAppear]", self); 
} 

@end 


// Second View Controller 


@implementation SecondViewController 

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    [[self navigationController] setNavigationBarHidden:NO animated:NO]; 

    NSLog(@"[%@ viewWillAppear]", self); 
} 

@end 

Hiçbir şey çalıştı vb viewWillAppear, viewDidAppear, viewWillDisappear ... lütfen [[self navigationController] setNavigationBarHidden:YES animated:NO]; kombinasyonları her türlü çalıştı. Ben de çalışır bir itme ve pop, "canlandırmak" için özel kod denedim, ama kenar kaydırma ve kaydırma kaydırma kaybettim. Daha derine inmeden önce, tekerleği yeniden icat etmediğime emin olmak istiyorum.

Starbucks uygulaması, taklit etmeye çalıştığım şey.

Uygulamanın kök görünüm denetleyicisi (koyu arka plan görünümü) tam ekran ve UINavigationBar'ın nasıl bulunmadığına dikkat edin. Ancak, düğmelerden birine dokunduğunuzda, bir UINavigationBar ile bir görünüm denetleyicisini (açık renkli görünüm) iter. Buradan, "geri" okuna dokunduğunuzda, denetleyiciyi görüntülemek gezinti çubuğuyla açılır. Etkileşimli pop tokatlamak hareketi de çalışır.

Starbucks iOS App

+0

Gezinme çubuğunun 2. görünümde görünmesinin tek nedeni, bir geri düğmesi var mı? Ya da navigasyon çubuğuna ihtiyacınız olan başka şeyler (başlık/altyazının dışında) nelerdir? – sfeuerstein

+0

Kesinlikle geri düğmesine ihtiyacınız var, fakat aynı zamanda kullanıcı daha derine indiğinde işlevsel bir gezinme denetleyicisi/çubuğuna da gereksinim duyar. – YarGnawh

+0

Ahh anladı. Ben popViewControllerAnimated çağırır ve nav bar gizli tutmak bir geri düğmesi ile sadece özel bir görünüm ekleyebileceğini söyleyecektim. Sanırım hala yapabiliyorsunuz, ama daha derinlemesine inceledikçe ne kadar karmaşık şeyler elde ettiğimi bilmiyorum – sfeuerstein

cevap

24

Kendiniz bir çözüm bulmadan yapabilirsiniz.

Kök viewController:

@implementation ViewController 

.... 

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    [self.navigationController setNavigationBarHidden:YES animated:animated]; 
} 

@end 

Ve itti viewController: Bu yapacak

@implementation SecondViewController 

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    [self.navigationController setNavigationBarHidden:NO animated:animated]; 
} 

@end 

Burada ne olduğunu. Ayrıca, etkileşimli geçişi çalışır halde tutar;)

Ancak, bu tür işlevlerin hiçbir şekilde elma tarafından belgelenmediğini rahatsız edici buluyorum. - Ayrıca gizlemek ve olabilir ile gösteri araç çubukları bu viewWillAppear içindeki ('noktalarını diyoruz' :)

DÜZENLEME Sadece bu sorunuzun yazdığı aynı kod olduğunu fark etti

. Lütfen tekrar test edin. Bunun çalıştığından% 100 eminim - Bu işlevselliği de benim uygulamalardan birinde kullandım.

Ayrıca, kodumun animated:NO yerine animated:animated kullandığını unutmayın. Buradaki önemli nokta olabilir :)

+0

"Ayrıca, kodumun animasyonlu olduğunu da belirtin: canlandırdığınız animasyonun yerine canlandırın: HAYIR. Buradaki en önemli nokta bu olabilir :)" gerçekten önemli olan nokta buydu. Teşekkürler! – YarGnawh

+0

'Animasyonlu' BOOL'u geçmek benim için kicker oldu. Etkileşimli (geri sürükleme) pop animasyonunu gerçekleştirdiğimde YES/NO'yu geçmeniz biraz garip gezinme çubuğu davranışına neden oldu. – marcshilling

+0

'UIViewController' temel sınıfınızda' BOOL navigationBarHidden' özelliği depolarsanız, yalnızca özelliği, onu gizleyen viewControllers için 'YES'ye ayarlamanız ve' viewWillAppear' işlevini '' self.navigationController setNavigationBarHidden 'olarak çağırmak için geçersiz kılmanız gerekir: self.navigationBarHidden animated: hareketli]; ' – skensell

1

Sadece ileri bu geri ve test etmek için iki görünüm denetleyicileri kurdu.

@interface VC1() 

@end 

@implementation VC1 

- (void)viewDidLoad { 
[super viewDidLoad]; 
} 

- (void)viewWillAppear:(BOOL)animated 
{ 
[super viewWillAppear:animated]; 
self.navigationController.navigationBarHidden = YES; 
} 

@end 

ve bir ikinci

#import "ViewControllerTwo.h" 

@interface ViewControllerTwo() 

@end 

@implementation ViewControllerTwo 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
} 

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    self.navigationController.navigationBarHidden = NO; 
} 

@end 

VC1 ViewControllerTwo gider bir düğme ile, (uygulama için kök denetleyicisi olan) bir NavigationController gömülür. VC1 -> ViewControllerTwo'dan bir itme segem var, bu yöntem işe yarıyor. Düğmeye dokunduğumda, ViewControllerTwo'da görünüm denetleyicisi görünür, geri bastığımda, navigationBar gitti.

+0

, aynı zamanda ilk yaptığım şeydi, ancak reklam bu sineklere izin vermez. Görünüm denetleyicisini sollamak için sola doğru kaydırırsanız, görünüm denetleyicisini izlemek yerine gezinme çubuğu hemen kaybolur. – YarGnawh

+0

Netleştirmek için, sorun navigasyon çubuğundan kurtulabilmeniz değil, navigasyon Çubuğunun ViewController ile birlikte canlandırmasını istediğinizde, birlikte kalmanız, düzeltmeniz gerekir? – domitall

+0

Doğru. Karışıklık için özür dilerim. – YarGnawh

İlgili konular