2015-03-26 13 views
7

Najpierw tworzę kontroler MainViewController. Następnie w MainViewController, robięViewDidAppear nie jest wywoływany, gdy widok modalny zostanie odrzucony.

[self presentViewController:modalViewController animated:YES completion:nil]; 
modalViewController.modalPresentationStyle = UIModalPresentationFormSheet; 

Kiedy odrzucenie modalViewController, na telefonach iPhone (z wyjątkiem iPhone 6+), viewDidAppear z MainViewController nazywa. Na urządzeniach iPad i iPhone 6+ viewDidAppear z MainViewController nie jest wywoływany.

Logika jest wywoływana funkcja, gdy modalViewController jest odwołany. Skąd mogę wiedzieć, kiedy modalViewController jest odrzucony.

+0

Spróbuj użyć innego "modalPresentationStyle". Czy to działa? – itsji10dra

+0

Jest to wymagane przez UX. Nie mogę tego zmienić. – Gonghan

+0

Dzwonisz: [super viewDidAppear: animated]; – itsji10dra

Odpowiedz

4

Możesz użyć delegata do wywoływania swojej funkcji w MainViewController, kiedy odrzucisz kontroler widoku modalnego. Np

MainViewController.h:

@protocol YourDelegate <NSObject> 
- (void)someFunction; 
@end 

@interface MainViewController : UIViewController <YourDelegate> 

@end 

MainViewController.m:

// Where you present the modal view 
ModalViewController *view = [[ModalViewController alloc] init]; 
view.delegate = self; 
[self presentViewController:view animated:YES completion:nil]; 

ModalViewController.h:

@interface ModalViewController : UIViewController 
@property (nonatomic, weak) id<YourDelegate> delegate; 
@end 

ModalViewController.m

// Wherever you dismiss.. 
[self dismissViewControllerAnimated:YES completion:^{ 
    [self.delegate someFunction]; 
} 
+0

co zrobić, jeśli projekt wykorzystuje scenorys i segues? Mam na myśli sytuację, gdy segue jest zdefiniowany w storyboardie, a nie w kodzie –

3

Sposób, w jaki Apple dostarczył kontrolery widoku, polega na tym, aby mieć delegata na przedstawionym kontrolerze widoku, który jest wywoływany, gdy kontroler widoku żąda zamknięcia. Następnie prezenter byłby odpowiedzialny za odwołanie kontrolera, a zatem wiedziałby także, kiedy wykonać powiązane usuwanie (zarówno przed animacją, jak i po niej).

Powiązane problemy