【问题标题】:Adding a SubView does not display before pushViewController在 pushViewController 之前添加 SubView 不显示
【发布时间】:2012-08-12 16:14:07
【问题描述】:

与这个问题类似:Adding subview, gets delayed? 但是我不认为你可以在单独的线程中 pushViewController 所以这真的不可能吗?

这是我想要做的:

我有一个 TableView,当按下一个单元格时,我想调用

[self.view addSubview:LoadingView]

显示带有微调器的叠加层。然后我打电话给

self.navigationController.navigationBar.hidden = NO;
[self.navigationController pushViewController:newGameViewController animated:YES];

但是,子视图仅显示一瞬间(在等待新视图控制器初始化时,单元格选择发生后约 1-4 秒)。

有什么方法可以在选择单元格的那一刻出现某种加载指示器?

【问题讨论】:

  • 我不确定我是否理解正确。您是否会延迟新视图控制器的加载而只是延长微调器的显示时间?
  • 这也可以工作。问题是新的视图控制器从我的服务器访问数据需要几秒钟 - 让用户处于无响应、未更新的视图。我想在他们按下按钮的那一刻显示加载器,这样他们就知道发生了什么事;)

标签: objective-c ios subview pushviewcontroller addsubview


【解决方案1】:

好的。那这个呢。在您的 didSelectRowAtIndexPath 中启动您的微调器(通过 addSubview ...)并开始从服务器加载您的内容。如果完成删除微调器并将新视图控制器推送到堆栈上。确保用户在此期间不能触摸任何其他单元格。顺便一提。从用户的角度来看,如果新控制器立即加载并显示一些等待消息,我会发现它更直观。

【讨论】:

    【解决方案2】:

    或者反过来:newGameViewController 显示微调器并开始在后台线程中从服务器加载数据。数据完成后,移除微调器并显示数据。这样一来,如果她不想等待,用户甚至可以返回。

    【讨论】:

    • 实际上.. 我意识到我决定通过我的 appDelegate 推送哪个视图控制器,它不能将子视图添加到视图中(我是一个 ios/objective c noobie,如果我说错了,请原谅我这个)
    【解决方案3】:

    在推送 newGameViewController 之前无需添加代码。

    在newGameViewController的viewDidLoad中,编写显示spinner的代码。要获得更新的 UI,只需在调用 Web API 之前插入延迟。

    在 GameViewController.m 中

    -(void) viewDidLoad
    {
        [self.view addSubview:LoadingView];
        [self performSelector:@selector(callWebAPI) afterDelay:0.1];
    }
    
    -(void) callWebAPI
    {
        //Handle network activity here..
    }
    

    【讨论】:

    • 所以我们有同样的想法 :-) 但我不会使用performSelector:withObject:afterDelay:,因为选择器将在主线程上执行并在运行时阻塞 UI。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    • 1970-01-01
    • 2012-11-10
    相关资源
    最近更新 更多