我有一个名为ShowListViewController
的UIViewController,它使用模态视图控制器将另一个视图压入堆栈:
AddShowViewController *addShowViewController = [[AddShowViewController alloc] init];
[addShowViewController setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
[self presentModalViewController:addShowViewController animated:YES];
当ShowListViewController
消失时,我想调用addShowViewController
类的方法populateTableData。
我认为answer found here会起作用,但事实并非如此。我的方法populateTableData
未被检测为可选方法。
基本上我的问题是:如何检测模态视图控制器何时消失,以便在类中调用将其推入堆栈的方法?
答案 0 :(得分:0)
好的,似乎在Apple的Utility App's
模板中,他们忽略了[UIViewController] [1]的文档,并且实际上不再从{{1}调用dismissModalViewControllerAnimated:
将模态视图推到屏幕上。
您案例中的基本想法是
UIViewController
AddShowViewControllerDelegate
实施此协议要获得完整示例,只需使用ShowListViewController
模板创建一个新项目,然后查看Utility
和FlipsideViewController
以下是适合您需求的示例:
<强> AddShowViewController.h 强>
MainViewController
<强> AddShowViewController.m 强>
@class AddShowViewController;
@protocol AddShowViewControllerDelegate
- (void)addShowViewControllerDidFinish:(AddShowViewController *)controller;
@end
@interface AddShowViewController : UIViewController
@property (nonatomic, assign) id <AddShowViewControllerDelegate> delegate;
- (IBAction)done:(id)sender;
@end
<强> ShowListViewController.h 强>
- (IBAction)done:(id)sender
{
[self.delegate addShowViewControllerDidFinish:self];
}
<强> ShowListViewController.m 强>
@interface ShowListViewController : UIViewController <AddShowViewControllerDelegate>
{
...
}
答案 1 :(得分:0)
这可能不是最佳解决方案,但可以在此时做你想做的事。
在你的showlistcontroller中添加一个像
这样的实例变量BOOL pushedView;
@implementation ShowListViewController
在进行模态演示之前,将其值设置为YES,如
pushedView = YES;
[self.navigationController presentModalViewController:popView animated:YES];
在ShowListViewController的viewWillAppear中,你可以检测它是否出现,因为pop被解雇了或不喜欢
if (pushedView) {
NSLog(@"Do things you would like to on pop dismissal");
pushedView = NO;
}
答案 2 :(得分:0)
我想你想要这样的东西。
你在你的modalVC里面建了一个代表:
@protocol ModalViewDelegate <NSObject>
- (void)didDismissModalView;
@end
并在你的MainVC中实现它:
@interface MainViewController : UIViewController <ModalViewDelegate>
{
然后你将在modalVC中创建一个委托属性,如下所示:
@interface ModalShizzle : UIViewController
{
id<ModalViewDelegate> dismissDelegate;
}
您将ModalVC的dismissDelegate设置为MainVC,然后创建委托方法。在你解雇它之前,你会打电话给ModalVC做最后一件事。 (这是填充你的表)。在您解雇modalVC之前,您将调用MainVC中的数据,然后执行您的任何操作。
-(void)didDismissModalView
{
//call ModalVC data here...
//then do something with that data. set it to a property inside this MainVC or call a method with it.
//method/data from modalVC is called here and now u can safely dismiss modalVC
[self dismissModalViewControllerAnimated:YES];
}
希望它有所帮助;)