1

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

对于没有加载视图的阻塞调用来说,这显然太长了,但是如果在视图实际加载时我没有回调,我就无法放置加载视图!MFMessageComposeViewControllerDelegate 协议中只有 1 个回调,但仅在关闭 sms 视图后回调,而不是在加载时回调。有任何想法吗?

我在想也许从模态视图加载逻辑中的其他地方获取回调,或者最后的手段我可以放一个 5-10 秒的加载屏幕,希望到那时它就可以了。

4

2 回答 2

2

MFMessageComposeViewController 是 UINavigationController 的子类。您是否尝试过实现 UINavigationControllerDelegate 的任何方法。具体来说:

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated;
于 2013-03-06T19:32:32.800 回答
0

经过一番挖掘,我发现我使用的是旧版本的UIViewController presentViewController:animated:completion:,所以我没有实现“完成”部分。这绝对是我在完成块中关闭加载视图的最佳选择,但它仅适用于 iOS 5.0 及更高版本。如果您必须支持低于 5.0 的版本,那么 Edwin 的回答可能会有所帮助。

更新:使用我上面的方法实际上并没有在实践中起作用。如果我抛出一个进度视图然后调用presentViewController:animated:completion:MFMessageComposeViewController它仍然会在进度视图出现之前进行阻塞调用。我假设这与在阻塞调用开始之前未完成运行循环有关,因此不会出现 UI 更改。

相反,我只是让我的进度视图在它实际出现时进行回调,然后在回调中我将开始加载MFMessageComposeViewController. 然后,当MFMessageComposeViewController回调被触发时,我会关闭我的进度视图以及MFMessageComposeViewController. 成功!

于 2013-03-06T20:15:58.093 回答