我需要一个加载屏幕来显示从服务器下载一些数据。我提出了一个没有动画的模态segue的视图控制器。但我不知道如何解除加载屏幕视图控制器,因为dismissViewController
函数只能从内部调用。
我应该可以从另一个视图控制器中关闭加载屏幕视图控制器。有什么建议吗?
答案 0 :(得分:2)
一种选择是使用NSNotificationCenter
。您可以发布自定义通知并在加载视图中将其收听以关闭它。
如果要在父视图中获取数据,则还可以从父视图关闭加载视图。您可以使用dismissViewController
类的presentingViewController属性从父视图中调用UIViewController
。
在您的案例中,您可以使用以下方法关闭子视图:
[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
<强> presentingViewController 强>
提供此视图控制器的视图控制器。 (只读) 声明
<强>夫特强>
var presentingViewController: UIViewController? { get }
<强>目标C 强>
@property(nonatomic, readonly) UIViewController *presentingViewController
<强>讨论强>
当您以模态方式呈现视图控制器时(显式或 隐式地)使用presentViewController:animated:completion: 方法,显示的视图控制器具有此属性集 到呈现它的视图控制器。如果视图控制器是 没有提供模态,但它的一个祖先是,这个属性 包含呈现祖先的视图控制器。如果没有 呈现了当前视图控制器或其任何祖先 在模态上,此属性中的值为nil。进口声明
导入UIKit可用性
适用于iOS 5.0及更高版本。
答案 1 :(得分:1)
你需要展示另一个VC吗?您可以只显示一个子视图,使其在启动应用程序时显示为true,并且在请求成功或失败时,回调会再次隐藏它(取决于您使用的网络框架)
我不知道你是否启动了请求并且知道什么时候完成,如果加载屏幕知道下载完成的时间你可以做两件事之一,或者你把第一个VC作为代表传递(定义一个协议)到第二个VC(加载屏幕),当你在加载屏幕上知道下载完成后,你可以在代理上调用一个方法来解除加载屏幕,
或者您可以使用NSNotificationCenter,在第一个VC上注册某种事件,当进程在加载屏幕上完成时,您通过此方法通知第一个VC,以关闭加载屏幕。
如果你在第一个VC上开始这个过程,并且你知道它何时也在第一个VC上结束我不会理解你的问题,因为你只是关闭加载屏幕它会起作用。 你能提供更多信息吗?如果您愿意,我可以发布一些代码,以帮助您采用其中一种方法。