İken viewWillAppear()
ve viewDidDisappear()
vardır geri düğmesi dokunulduğunda denilen, onlar da diğer zamanlarda denir. Bununla ilgili daha fazla bilgi için yanıtın sonuna bakın.
UIViewController.parent kullanma
VC, ana öğesinden (NavigationController) willMoveToParentViewController(_:)
VEYA yardımıyla kaldırıldığında geri düğmesinin algılanması daha iyi olurdidMoveToParentViewController()
Üst öğe nil ise, görünüm denetleyicisi gezinti yığınından çıkarılır ve kapatılır. Ebeveyn sıfır değilse, yığına eklenir ve sunulur.
// Objective-C
-(void)willMoveToParentViewController:(UIViewController *)parent {
[super willMoveToParentViewController:parent];
if (!parent){
// The back button was pressed or interactive gesture used
}
}
// Swift
override func willMove(toParent parent: UIViewController?) {
super.willMove(toParent: parent)
if parent == nil {
// The back button was pressed or interactive gesture used
}
}
Dışarı takas willMove
için didMove
ve onay self.parent işi yapmak için sonra görünümü denetleyicisi atlamamış.
İşten çıkarmayı durdurma
Unutmayın, bir tür zaman uyumsuz kayıt yapmanız gerekiyorsa üst öğeyi kontrol etmek geçişi "duraklatmanıza" izin vermez. Bunu yapmak için aşağıdakileri uygulayabilirsiniz. Burada sadece olumsuz süslü iOS tarz / animasyonlu geri düğmesini kaybetmek. Ayrıca burada etkileşimli kaydırma hareketi ile dikkatli olun. Bu durumu ele almak için aşağıdakileri kullanın.
var backButton : UIBarButtonItem!
override func viewDidLoad() {
super.viewDidLoad()
// Disable the swipe to make sure you get your chance to save
self.navigationController?.interactivePopGestureRecognizer.enabled = false
// Replace the default back button
self.navigationItem.setHidesBackButton(true, animated: false)
self.backButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Plain, target: self, action: "goBack")
self.navigationItem.leftBarButtonItem = backButton
}
// Then handle the button selection
func goBack() {
// Here we just remove the back button, you could also disabled it or better yet show an activityIndicator
self.navigationItem.leftBarButtonItem = nil
someData.saveInBackground { (success, error) -> Void in
if success {
self.navigationController?.popViewControllerAnimated(true)
// Don't forget to re-enable the interactive gesture
self.navigationController?.interactivePopGestureRecognizer.enabled = true
}
else {
self.navigationItem.leftBarButtonItem = self.backButton
// Handle the error
}
}
}
Görüntüleme hakkında daha fazla bilgi görünecek
viewWillAppear
viewDidDisappear
Sorunu almadıysanız , bir örnek inceleyelim. Üç görünüm denetleyiciniz olduğunu varsayalım:
- ListVC: Şeylerin tablo görünümü
- DetailVC: Bir şey hakkında ayrıntılar
- AyarlarVC: Bir şey için bazı seçenekler
Aramaları izleyin Lets detailVC
sen gitmek gibi listVC
hiç settingsVC
ve gerilistVC
Liste> Ayrıntı (itme ayrıntısıVC) Detail.viewDidAppear
<- ayrıntıyı görüntüle
> Ayarlar (itme ayarlarıVC) Detail.viewDidDisappear
<- kaybolur
Ve geri döndüğümüzde ...
Ayarlar> Ayrıntı (pop ayarlarıVC) Detail.viewDidAppear
<- Görünüyor
Ayrıntı> Liste (pop ayrıntısıVC) Detail.viewDidDisappear
<- yok
viewDidDisappear
Sadece geri giderken değil, ileri giderken de birden çok kez çağrıldığına dikkat edin . İstenebilecek hızlı bir işlem için, ancak bir ağ çağrısı gibi daha karmaşık bir işlem için kaydedilemeyebilir.