在顯示和解除模態的視圖控制器中,您應該調用dismissViewControllerAnimated:completion
方法來解除模態。模態不應該自行解散。你可以使用一個完成塊來執行你想要的任何代碼,當模態完成解除時它將執行。下面的例子。
[self dismissViewControllerAnimated:YES completion:^{
//this code here will execute when modal is done being dismissed
[_tableView reloadData];
}];
當然,不要忘了避免在塊中強烈捕獲自己。
如果您最終得到模態消除本身,您將需要一個委託方法,以便模態可以返回到呈現視圖控制器或由模式發送並由呈現視圖控制器捕獲的通知,或者您可以在呈現視圖控制器中實現viewWillAppear:
。每當視圖即將出現時,此方法都會觸發。這意味着第一次以及在一個模式被解僱之後,並且即將展示它正在呈現的視圖。
--------------------------------------------- -------------------------------------------
以下是一個寫你自己的協議和使用它的例子。
MyModalViewController.h在任何你想在你的MyModalViewController實現文件
@protocol MyModalViewControllerDelegate <NSObject>
//if you don't need to send any data
- (void)myModalDidFinishDismissing;
//if you need to send data
- (void)myModalDidFinishDismissingWithData:(YourType *)yourData
@end
@interface MyModalViewController : UIViewController
@property (weak) id <MyModalViewControllerDelegate> delegate;
//place the rest of your properties and public methods here
@end
的,叫你選擇的委託方法。你應該首先確保你的委託實際上對選擇器做出了響應。 MyModalViewController.m if([self.delegate respondsToSelector:@selector(myModalDidFinishDismissing)]) [self.delegate myModalDidFinishDismissing];
在呈現模態的視圖控制器中,您需要在頭文件中聲明符合協議,您需要將模態的委託設置爲viewcontroller,並確保實際實現了委託方法你打算使用。
MyPresentingViewController.h
@interface MyPresentingViewController : UIViewController <MyModalViewControllerDelegate>
MyPresentingViewController.m
myModal.delegate = self;
- (void)myModalDidFinishDismissing {
//do something
[tableView reloadData];
}
[' - [UITableView reloadData]'](https://developer.apple.com/library/ios/documentation/uikit/reference/UITableView_Class/Reference/Reference.html#//apple_ref/occ/instm/UITableView/reloadData)?或KVC,但這是一個更高級的話題。 – Kevin
你還在爲此工作嗎?想辦法? –
還沒有。我暫時解決了這個問題,只需在導航堆棧上推視圖控制器,而不是進行模態轉換,但如果可能的話,我仍然希望能夠進行模態演示...... – ngoue