我的应用程序中有一个MFMessageComposeViewController,有时收件人数量最多可达200左右。在4S上测试时,单击我的按钮后加载短信视图需要10秒钟(!!)。我想用旧设备可能会更长。
对于没有加载视图的阻塞调用,这显然太长了,但是如果在视图实际加载时没有回调,我就无法加载加载视图! MFMessageComposeViewControllerDelegate协议中只有1个回调,但只在sms视图被解除后才回调,而不是在加载时回调。有什么想法吗?
我想也许可以从模态视图加载逻辑中的其他地方获取回调,或者最后一种情况我可以放置一个5-10秒的加载屏幕并希望它在那时起作用。
答案 0 :(得分:2)
MFMessageComposeViewController is a subclass of UINavigationController。您是否尝试过实现任何UINavigationControllerDelegate的方法。具体做法是:
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated;
答案 1 :(得分:0)
经过一番挖掘,我发现我使用的是UIViewController's presentViewController:animated:completion:
的旧版本,所以我没有完成"完成"部分实施。这绝对是我的目的最好的选择,只是在完成块中解除我的加载视图,但它只适用于iOS 5.0及更高版本。如果你必须支持低于5.0,那么Edwin的回答可能会有所帮助。
更新:使用我的上述方法实际上并没有起作用。如果我抛出进度视图然后在presentViewController:animated:completion:
上调用MFMessageComposeViewController
,它仍会在进度视图出现之前进行阻塞调用。我假设它与阻塞调用开始之前未完成的运行循环有关,因此不会出现UI更改。
相反,我只是让我的进度视图在实际显示时进行回调,然后在回调中我将开始加载MFMessageComposeViewController
。然后,当MFMessageComposeViewController
回调被解雇时,我会关闭我的进度视图以及MFMessageComposeViewController
。成功了!