У меня есть View Controller, который отображает табличное представление.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 немного хакерский, но пока его будет достаточно. 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, ячейки табличного представления не отображаются.
Я подумал, может быть, мне нужно обновить представление / таблицу, поэтому я добавил обратный вызов протокола из второго виртуального канала в первый, который вызывается, когда пользовательотправляет 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): вызывается)
В чем проблема с обоими подходами?Спасибо