我希望有人能指出我正确的方向。
我有2个控制器,MasterViewController(显示大量数据)和LoginViewController(记录用户并获取数据)。
MasterViewController是根控制器。我在顶部有这个代码来检查用户是否已登录。如果他们已登录,则调用loadView方法,否则他们将被带到登录视图控制器。
- (void)viewDidLoad
{
[super viewDidLoad];
NSDictionary *session = [Global getSession];
if(!session){
// Not logged in.
LoginViewController *loginViewController = [LoginViewController alloc];
[self.navigationController presentViewController:loginViewController animated:YES completion:nil];
}else{
[self loadView];
}
}
一旦他们登录,我就有了这段代码,用这段代码将它们带回MasterViewController:
[self dismissViewControllerAnimated:NO completion:nil];
问题是MasterViewController根本没有加载。如何在用户返回视图之前重新启动整个视图?
谢谢, 彼得
答案 0 :(得分:1)
有不同的方式。
使用委托,并在主视图控制器中声明一个重装方法,例如'reloadData'。在显示登录视图控制器之前,将主视图控制器设置为loginSuccessEvent的委托。在解雇之前登录成功后,请调用委托方法。
在app delegate中设置bool属性isReloadNeeded
。在主视图控制器中,viewWillAppear
或viewWillAppear
检查此bool以重新加载数据。在登录视图控制器中将bool设置为yes,并在主视图控制器中重新加载后重置。
待办选项1:
定义交互协议
@protocol LoginDelegate
-(void) loginSuccessPostProcess;
@end
在Login View Controller中。
.h文件 - >声明属性
@property (weak) id< LoginDelegate> loginDelegate;
.m - &gt;在解除之前登录成功后,调用委托方法
//Login Success
[self. loginDelegate loginSuccessPostProcess];
[self dismissViewControllerAnimated:YES completion:nil];
主视图控制器 - &gt;实现方法。
.h - &gt;采用协议
@interface mainViewCOntroller < LoginDelegate>
.m
在实例化之后和呈现之前,将主视图控制器设置为Login View Contoller中委托属性的委托
loginViewController * login = [[LoginViewController alloc] init]; //在实例化之后和呈现之前设置您的委托 login.loginDelegate = self; [self presentViewController:login];
实施重装方法
-(void) loginSuccessPostProcess
{
//Your Method.
}