关闭dismissViewController不会触发viewWillAppear

时间:2014-05-31 09:09:55

标签: ios objective-c ios7 modal-dialog

我有一个视图打开模态seque视图。

我使用以下代码打开此视图:

- (IBAction)openInfopage:(UIButton *)sender;
{
  [self performSegueWithIdentifier:@"Infopage" sender:self.view];
}

我用以下方法关闭此视图:

- (IBAction)closeView:(id)sender { 
  // old version: 
  //[self dismissViewControllerAnimated:YES completion:nil];

  // my new version:
  [self.presentingViewController dismissViewControllerAnimated:YES completion:nil];       
}

当模态关闭时,我想用模态视图生成的新数据更新视图。

我使用[self.tableView reloadData];进行更新,但是我可以在哪里放置此代码,以便它会启动?

我尝试使用viewWillAppear,但是在关闭模态视图时不会调用它。

1 个答案:

答案 0 :(得分:1)

我总是把这些东西放在委托协议中。所以只需将其插入到modal-viewcontroller.h:

@protocol MyDelegateProtocol <NSObject>

@optional
-(void)modalFinished;

@end

@interface ViewController : UIViewController

@property (nonatomic, weak) id <MyDelegateProtocol> delegate;

@end

在.m中称之为:

if(_delegate) [_delegate modalFinished];

完成后。在演示ViewController中,你必须实现这个:

<MyDelegateProtocol>
@implementation行后的

。并实现委托方法 - (void)modalFinished。在这种方法中,您可以进行刷新。当然,在呈现视图控制器中将委托属性从modal-viewcontroller设置为self。

编辑:

MyViewController mvc = ...;
MyViewController.delegate = self;
[self presentViewController:...];

如果你通过segue出现:

在prepareForSegue中:

MyViewController *mvc = segue.destinationViewController;
mvc.delegate = self;