【问题标题】:How to reload a view when using dismissViewControllerAnimated使用dismissViewControllerAnimated时如何重新加载视图
【发布时间】:2014-07-24 00:02:05
【问题描述】:

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

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

谢谢, 彼得

【问题讨论】:

    标签: ios objective-c viewcontroller dismiss presentviewcontroller


    【解决方案1】:

    有不同的方法。

    1. 使用委托,并在主视图控制器中声明一个重新加载方法,例如“reloadData”。在呈现登录视图控制器之前,将主视图控制器设置为 loginSuccessEvent 的委托。登录成功后,在关闭它之前调用委托方法。

    2. 在应用委托中设置布尔属性isReloadNeeded。在主视图控制器中,viewWillAppearviewWillAppear 选中此布尔值以重新加载数据。在登录视图控制器中将 bool 设置为 yes 并在主视图控制器中重新加载后重置。

    待办事项选项1:

    定义交互协议

    @protocol LoginDelegate
    
       -(void) loginSuccessPostProcess;
    
    @end
    

    在登录视图控制器中。

    .h 文件 --> 声明一个属性

    @property (weak) id< LoginDelegate> loginDelegate;
    

    .m --> 登录成功后关闭前调用委托方法

    //Login Success
    [self. loginDelegate loginSuccessPostProcess];
    [self dismissViewControllerAnimated:YES completion:nil];
    

    主视图Controller -->实现方法

    .h --> 采用协议

      @interface mainViewCOntroller < LoginDelegate>
    

    .m

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

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

    实现重新加载的方法

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

    【讨论】:

    • 我喜欢选项 1 的声音。但我很难完全理解如何做到这一点。你能举个例子吗?
    • 更新答案请查看。
    • 谢谢,我已经跳出来了,但我会在以后进去的时候试一试:) 非常感谢
    • 我已经实现了一切,但没有任何反应。我还添加了 NSLog(@"Testing");在 loginSucessPostProccess 方法中,结果竟然没有被调用?
    • 没关系,我忘了设置 login.LoginDelegate!优秀作品。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多