Композитор сообщений SMS: не отображается
У меня есть UITableViewController, представляющий список контактов, когда пользователь выбирает строку, он показывает UIActionSheet, чтобы попросить пользователя о действии (вызов, отправить смс...).
Пользователь выбирает действие, и этот первый UIActionSheet покажет другой UIActionSheet, который содержит номера телефонов.
Пользователь выбирает номер телефона, и это должно показать SMS-сообщение композитора.
Проблема заключается в том, что когда пользователь выбирает номер телефона, представление компоновщика сообщений не отображается (просто черный экран), и я получаю MessageComposeResultCancelled в didFinishWithResult объекта MFMessageComposeViewController.
Который генерирует это предупреждение "Предупреждение: попытка уволить из контроллера представления, в то время как презентация или увольнение в процессе!
Как правильно позвонить композитору и показать SMS-сообщение?
(это прекрасно работает, если я вызываю его напрямую, когда пользователь выбирает строку в списке с помощью didSelectRowAtIndexPath)
Вот некоторый код:
1 - вызов первого UIActionSheet в методе didSelectRowAtIndexPath:
UIActionSheet *popupQuery;
...
[popupQuery showInView:self.view];
2 - вызов второго UIActionSheet в методе clickedButtonAtIndex:
UIActionSheet *popupQuery2;
...
[popupQuery showInView:self.view];
3 - из того же метода, вызов к составителю сообщения:
[self sendSMS:@"" recipientList:[phoneNumbers objectAtIndex:buttonIndex]];
метод, который показывает составителю сообщения:
(void)sendSMS:(NSString *)bodyOfMessage recipientList:(NSArray *)recipients
{
MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init];
if([MFMessageComposeViewController canSendText])
{
controller.body = bodyOfMessage;
controller.recipients = recipients;
controller.messageComposeDelegate = self;
[self presentModalViewController:controller animated:YES];
}
}
2 ответа
Решение найдено здесь: MFMessageComposeViewController показывает пустой / белый экран
controller.recipients = [NSArray arrayWithObject:theRecipients];
theRecipients - это массив, содержащий только один элемент (выбранный номер телефона)
Поскольку вы не хотите показывать два модальных элемента управления одновременно, используйте actionSheet:didDismissWithButtonIndex:
метод делегата, так что лист действий скрыт, когда вы начинаете показывать контроллер обмена сообщениями.
Следующий код показывает композитор, который не отменяется автоматически. я могу видеть 0
в журнале, который является значением MessageComposeResultCancelled
, только когда я нажимаю Cancel
кнопка. Вы пытаетесь взломать, нажав send
кнопка автоматически?
MFMessageComposeViewController.h
enum MessageComposeResult {
MessageComposeResultCancelled, //0
MessageComposeResultSent, //1
MessageComposeResultFailed //2
};
MyViewController.m
-(IBAction)onButtonPressed:(id)sender {
UIActionSheet * sheet = [[UIActionSheet alloc] initWithTitle:@"Title"
delegate:self
cancelButtonTitle:@"Go out"
destructiveButtonTitle:@"Show message composer"
otherButtonTitles:nil, nil];
[sheet showInView:self.view];
}
-(void) actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex {
MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init];
if([MFMessageComposeViewController canSendText])
{
controller.body = @"body";
// controller.recipients = recipients;
controller.messageComposeDelegate = self;
[self presentModalViewController:controller animated:YES];
}
}
-(void) messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result {
NSLog(@"%d", result);
[controller dismissModalViewControllerAnimated:YES];
}