在呈现和关闭模式的视图控制器中,您应该调用该 dismissViewControllerAnimated:completion
方法来关闭模式。模态不应自行消失。您可以使用完成块来执行您希望在模式完成关闭时执行的任何代码。下面的例子。
[self dismissViewControllerAnimated:YES completion:^{
//this code here will execute when modal is done being dismissed
[_tableView reloadData];
}];
当然不要忘记避免在块中强烈捕获自我。
如果您最终使模态消失,您将需要一个委托方法,以便模态可以与呈现视图控制器进行通信,或者由模态发送并由呈现视图控制器捕获的通知,或者您可以viewWillAppear:
在呈现视图控制器。每次视图即将出现时都会触发此方法。这意味着第一次以及在模态被解除并且即将显示它所呈现的视图之后。
-------------------------------------------------- --------------------------------------
下面是编写您自己的协议并使用它的示例。
MyModalViewController.h
@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 实现文件中的哪个位置调用您选择的委托方法。不过,您应该首先确保您的委托确实响应了选择器。MyModalViewController.m if ( [self.delegate respondsToSelector:@selector(myModalDidFinishDismissing)] ) [self.delegate myModalDidFinishDismissing];
在呈现模态的视图控制器中,您需要在头文件中声明您符合协议,您需要将模态的委托设置为视图控制器,并确保您实际实现了您打算使用的委托方法.
我的PresentingViewController.h
@interface MyPresentingViewController : UIViewController <MyModalViewControllerDelegate>
我的PresentingViewController.m
myModal.delegate = self;
- (void)myModalDidFinishDismissing {
//do something
[tableView reloadData];
}