2011-01-07 14 views
5

Uygulamamda temel bir Navigasyon Denetleyici var. Biri hariç tüm görünümlerim için denetleyici gerektiği gibi çalışır.iPhone: Bir Gezinme Denetleyicisindeki geri düğmesini nasıl geçersiz kılarım?

Ancak, özellikle bir görünüm için, 'geri' düğmesinin önceki görünüme geri gitmemesini, ancak ayarlamış olduğum birine gitmesini istiyorum. Özellikle, 2 kez geri dönüp bir tanesini geçecek.

- (void)viewWillDisappear:(BOOL)animated { 
[super viewWillDisappear:animated]; 
//i set a flag to know that the back button was pressed 
if (viewPushed) { 
    viewPushed = NO; 
} else { 
    // Here, you know that back button was pressed 
    mainMenu *mainViewController = [[mainMenu alloc] initWithNibName:@"mainMenu" bundle:nil]; 
    [self.navigationController pushViewController:mainViewController animated:YES]; 
    [mainViewController release]; 
} 

}

:

Ben kaybolduğunda ben görünümü müdahale edebilir, bu yüzden ben istiyorum o sayfaya gidin olması kodunda koymak için çalıştı bulundu Biraz araştırma yaptıktan sonra Bu işe yaramadı, herhangi bir fikri olan var mı?

Teşekkürler!

cevap

12

Kodunuzda, başka bir denetleyiciyi, fazladan bir öğeyi çıkarmak yerine yığının üstüne itmeye çalışıyormuş gibi görünüyorsunuz. Kendinize ait bir düğme ile

NSArray *vcs = [self.navigationController viewControllers]; 
[self.navigationController popToViewController:[vcs objectAtIndex:[vcs count]-3]; 

Alternatif tamamen geri düğmesine yerini alabilir:

geri dönüyor iki seviye yapar sizin kod olarak bu deneyin? senin ViewController olarak:

UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(doSomething:)]; 

self.navigationItem.hidesBackButton = YES; 
self.navigationItem.leftBarButtonItem = item; 
[item release]; 

Sonra doSomething yazabilirsiniz: yöntem belki Yukarıdaki haberi kodu kullanarak, yığın kapalı iki öğe pop.

+0

Şimdiye kadar harika çalışıyor! Cevabınız için teşekkürler!! Özel düğmeyi oluşturmayı, yöntemi oluşturmayı ve diziyi açık görünümler listesiyle oluşturabiliyordum. Ancak, popToViewController hattı üzerinden adım attığımda 'yakalanmamış bir istisna' hatası alıyorum ... Bunu bile denedim: [self.navigationController popToViewController: [vcs objectAtIndex: 1]]; boşuna. Şimdi popToViewController hakkında daha fazla araştırma yapıyorum. –

+0

Kullanarak sona erdi: [self.navigationController popToViewController: [self.navigationController.viewControllers objectAtIndex: 0] animasyonlu: EVET]; iki seviyeye geri dönmek için .. şimdiye kadar harika çalışıyor, bu yüzden teşekkür ederim! –

+0

Sadece en üst seviyeye geri dönmek istiyorsanız, popToRootViewControllerAnimated var: hangi çalışması gerekir. –

2

UINavigationBarDelegate temsilcisini uygulamaya çalışabilirsiniz. -navigationBar:didPopItem: yöntemi çağrıldığında, UINavigationController'dan ek bir öğe açabilir ve böylece iki öğeyi bir kerede doldurabilirsiniz.

+0

olduğu Navigasyonu geriye doğru teyit etmek için UINavigationBarDelegate - (BOOL) navigationBar: (UINavigationBar *) navigationBar shouldPopItem: (UINavigationItem *) öğe yöntemini uygulamak zorunda olduğunuz farkla. –

3

basit bir çözüm: Bu, örneğin UINavigationController popViewControllerAnimated yöntemi geçersiz kılmak için bir şekilde aynı zamanda daha fazla ya da daha az

- (void)viewWillDisappear:(BOOL)animated { 
    //if true, back was pressed 
    if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound) { 
      //your logic 
    } 
} 
+0

Temiz çözüm. IOS 9'da çalışıyor. Teşekkür ederim . –

+0

Ne geri dönmeden önce bir koşulu kontrol etmek istersem ve eğer o durum başarısız olursa.Orada geri dönmek için durdurmak istiyorum. windows veya android bilirsiniz, sonra e.handled = true gibi bir şey istiyorum; – Yawar

-1
UIButton *home = [UIButton buttonWithType:UIButtonTypeCustom]; 
UIImage *homeImage = [UIImage imageNamed:@"back.png"]; 
[home setBackgroundImage:homeImage forState:UIControlStateNormal]; 
[home addTarget:self action:@selector(LogOut) 
forControlEvents:UIControlEventTouchUpInside]; 
home.frame = CGRectMake(0, 0, 69, 26); 
UIBarButtonItem *button2 = [[UIBarButtonItem alloc] initWithCustomView:home]; 
[[self navigationItem] setLeftBarButtonItem:button2]; 
[button2 release]; 
button2 = nil; 
İlgili konular