如何在使用dismissViewControllerAnimated时重新加载视图

时间:2014-06-03 15:12:43

标签: ios objective-c viewcontroller dismiss presentviewcontroller

我希望有人能指出我正确的方向。

我有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根本没有加载。如何在用户返回视图之前重新启动整个视图?

谢谢, 彼得

1 个答案:

答案 0 :(得分:1)

有不同的方式。

  1. 使用委托,并在主视图控制器中声明一个重装方法,例如'reloadData'。在显示登录视图控制器之前,将主视图控制器设置为loginSuccessEvent的委托。在解雇之前登录成功后,请调用委托方法。

  2. 在app delegate中设置bool属性isReloadNeeded。在主视图控制器中,viewWillAppearviewWillAppear检查此bool以重新加载数据。在登录视图控制器中将bool设置为yes,并在主视图控制器中重新加载后重置。

  3. 待办选项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

    1. 在实例化之后和呈现之前,将主视图控制器设置为Login View Contoller中委托属性的委托

      loginViewController * login = [[LoginViewController alloc] init]; //在实例化之后和呈现之前设置您的委托 login.loginDelegate = self; [self presentViewController:login];

    2. 实施重装方法

       -(void) loginSuccessPostProcess
       {
              //Your Method.
        }