我有一个显示表格视图的视图控制器。 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;
}
}
问题是用户发送短信后表格视图单元格没有显示。
我想也许我需要刷新视图/表,所以我添加了从第二个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:确实被调用了)
这两种方法有什么问题?感谢
答案 0 :(得分:0)
对于第二个变体,我改为:
[self presentViewController:controller animated:YES completion:nil]; [self dismissViewControllerAnimated:YES completion:nil];
这很有效,还没有尝试应用第一种方法。
答案 1 :(得分:0)
我遇到了类似的UI问题。 我的情况是:控制器,让我说控制器A,我编写了代码来呈现和解雇MFMessageComposeController,没有被直接用作活动控制器,而是我使用A.view作为另一个控制器的子视图,比如说控制器B.因此,写下以下内容会扭曲观点:
[self presentViewController:composeVC animated:YES completion:nil];
然后写下面的内容解决了我的问题:
[self.customTabbarNavigation presentViewController:composeVC animated:YES completion:nil];
customTabbarNavigation是控制器B,ans实际上是导航控制器,当控制器A的视图可见时它处于活动状态。
必须改变composeVC。