MFMessegeComposeViewController最终加载时我需要回调

时间:2013-03-06 19:21:58

标签: ios objective-c

我的应用程序中有一个MFMessageComposeViewController,有时收件人数量最多可达200​​左右。在4S上测试时,单击我的按钮后加载短信视图需要10秒钟(!!)。我想用旧设备可能会更长。

对于没有加载视图的阻塞调用,这显然太长了,但是如果在视图实际加载时没有回调,我就无法加载加载视图! MFMessageComposeViewControllerDelegate协议中只有1个回调,但只在sms视图被解除后才回调,而不是在加载时回调。有什么想法吗?

我想也许可以从模态视图加载逻辑中的其他地方获取回调,或者最后一种情况我可以放置一个5-10秒的加载屏幕并希望它在那时起作用。

2 个答案:

答案 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。成功了!