我有一个用于更新某些NSUserDefaults的视图。这些默认值会对不同视图中的表产生影响。我面临的问题是我想在再次显示视图之前重新加载表中的数据。
目前我有viewA
包含表格,然后我使用以下代码显示viewB
:
[self presentModalViewController:viewB animated:YES];
用户更新后,NSUserDefaults viewB
将被解除,因此会再次显示viewA
。在显示viewA
之前,我希望能够刷新数据。有没有办法做到这一点?
答案 0 :(得分:1)
在viewA的viewWillAppear中调用刷新代码。
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
// your refresh code
}
答案 1 :(得分:0)
通过delegation:
ViewAController应该实现ViewBController提供的protocol
@protocol ViewBControllerProtocol
/*
use full signatures here
*/
@end
@interface ViewBController{
}
@property (nonatomic, assign) id<ViewBControllerProtocol> delegate;
@end;
@interface ViewAController <ViewBControllerProtocol>{
}
@end;
@implemantation ViewAController
// implement the method defined in the protocol
@end
然后你做
viewB.delegate = viewA
您会找到sample code at github,其中CheckTableController
为ViewBController
和ShowFavoritesTableController
ViewAController
。
答案 2 :(得分:0)
您可以使用presentingViewController
/ parentViewController
(阅读这些文档)。但更好的全面解决方案是使“父”成为模态控制器的委托,并让父实现委托符合的协议。
更好的解决方案是使用块中的返回代码来呈现模态控制器,但是您必须为此推出自己的解决方案,因为Apple还没有给我们一个。
答案 3 :(得分:0)
如果viewAcontroller是viewBcontroller的委托,我猜你在viewA的方法中解除了modalViewController或viewB。 在同样的方法中,您只需要实现所需的表重载数据,这将在再次显示viewA之前完成。
我有这样的代码:
接口前的viewBcontroller.h中的:
@protocol ViewBControllerDelegate <NSObject>
-(IBAction)closeViewBController;
@end
在viewBcontroller.m中:
-(IBAction)closeView{
[[self parentViewController] performSelector:@selector(closeViewBController)];
}
在viewAcontroller.h中:
@interface viewAcontroller : UIViewController <ViewBControllerDelegate>
{//....implementation here
并在ViewAController.m中:
-(IBAction)closeViewBController{
[self dismissModalViewControllerAnimated:YES];
//code needed if NSUserDefault is modified
}
这很容易写。希望这会回答你的问题