![](/img/trans.png)
[英]IOS/Autolayout: Change to Presenting View After Presented Controller Dismissed
[英]Presenting view not appearing properly after MFMessageComposeViewController is presented and then dismissed
我有一个显示表视图的视图控制器。 VC调用另一个VC向用户显示发送SMS视图,此SMS VC的代码为:
- (void) sendSMSWithBody: (NSString*) body andRecipients: (NSArray*) recipients
{
MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init];
if ([MFMessageComposeViewController canSendText])
{
controller.messageComposeDelegate = self;
controller.body = body;
controller.recipients = recipients;
[[UIApplication sharedApplication].delegate.window.rootViewController addChildViewController:self];
[self presentModalViewController:controller animated:YES];
}
}
- (void) messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
{
[self dismissModalViewControllerAnimated:YES];
[[UIApplication sharedApplication].delegate.window.rootViewController removeFromParentViewController];
}
(我知道对sharedApplication的调用有点hacky,但现在就足够了。rootViewController是一个UINavigationController,其根控制器设置为表视图控制器)
我从表VC调用SMS VC,如下所示:
- (void ) viewDidAppear:(BOOL)animated
{
static BOOL presentedSMSVC = NO;
if (!presentedSMSVC)
{
SendSMSController *sendSMS = [[SendSMSController alloc] init];
[sendSMS sendSMSWithBody:@"body"
andRecipients:[NSArray arrayWithObject:@"123456789"]];
presentedRegisterVC = YES;
}
}
问题在于用户发送SMS后,表格视图单元格未显示。
我以为可能需要刷新视图/表,所以我在第2个VC上添加了第一个VC的协议回调,当用户发送SMS时会调用该协议,然后在回调调用[self.tableView reloadData]中,但是它没有区别。
因此,我摆脱了中介类,并编辑了表格视图以直接显示SMS视图,如下所示:
- (void ) viewDidAppear:(BOOL)animated
{
static BOOL presentedRegisterVC = NO;
if (!presentedRegisterVC)
{
MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init];
if ([MFMessageComposeViewController canSendText])
{
controller.messageComposeDelegate = self;
controller.body = @"body";
controller.recipients = [NSArray arrayWithObject:@"12345678"];
[self presentModalViewController:controller animated:NO];
}
}
}
- (void) messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
{
[self dismissModalViewControllerAnimated:NO];
}
但是现在MFMessageComposeViewController并没有关闭(尽管messageComposeViewController:didFinishWithResult:确实被调用了)
两种方法都有什么问题? 谢谢
我遇到了类似的UI问题。 我的情况是:控制器(假设我编写了代码来呈现和关闭MFMessageComposeController的控制器A)没有直接用作活动控制器,而是使用A.view作为另一个控制器的子视图,例如控制器B。因此编写以下内容会使视图失真:
[self presentViewController:composeVC animated:YES completion:nil];
但是随后编写以下代码解决了我的问题:
[self.customTabbarNavigation presentViewController:composeVC animated:YES completion:nil];
customTabbarNavigation是控制器B,而ans实际上是导航控制器,当控制器A的视图可见时,它是活动的。
解散composeVC必须进行相同的更改。
对于第二个变体,我更改为:
[self presentViewController:动画控制器:是完成:无]; [self dismissViewControllerAnimated:YES完成:无];
而且行之有效,没有尝试将其应用于第一种方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.