如何在使用dispissviewcontrolleranimated时重新加载视图
-
21-12-2019 - |
题
我希望有人能指向正确的方向。
我有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根本没有加载。如何重新调整在用户返回视图之前的整个视图?
谢谢, 彼得
解决方案
有不同的方式。
-
使用委托,并声明主视图控制器中的重新加载方法说'reloaddata'。在呈现登录视图控制器之前,将主视图控制器设置为logingSuccessEvent的委托。在解雇它之前,登录成功后,请调用委托方法。
-
设置app委托的bool属性,
isReloadNeeded
。在主视图控制器中,viewWillAppear
或viewWillAppear
检查该BOOL以重新加载数据。从登录视图控制器将BOOL设置为Yes,并在主视图控制器中重新加载后重置。 -
将主视图控制器作为登录查看Consler在实例化之后的代表属性,并在呈现它之前
loginviewcontroller * login= [[loginViewController Alloc] init]; //在实例化后和在提出之前设置委托 login.logindelegate= self; [SELE PRIVIEWVIEWCONTROLLER:登录];
要做option1:
定义用于交互的协议
@protocol LoginDelegate
-(void) loginSuccessPostProcess;
@end
.
在登录视图控制器中。
.h文件 - >声明属性
@property (weak) id< LoginDelegate> loginDelegate;
.
.m - >在解雇前取得登录后,调用委托方法
//Login Success
[self. loginDelegate loginSuccessPostProcess];
[self dismissViewControllerAnimated:YES completion:nil];
.
主视图控制器 - >实现方法。
.h - >采用协议
@interface mainViewCOntroller < LoginDelegate>
.
.m
实现刷新方法
-(void) loginSuccessPostProcess
{
//Your Method.
}
.