連絡先のリストを表示する UITableViewController があります。ユーザーが行を選択すると、UIActionSheet が表示され、ユーザーにアクション (電話、SMS の送信など) を要求します。
ユーザーがアクションを選択すると、最初の UIActionSheet に電話番号を含む別の UIActionSheet が表示されます。
ユーザーが電話番号を選択すると、SMS メッセージ コンポーザが表示されます。
問題は、ユーザーが電話番号を選択すると、メッセージ コンポーザー ビューが表示されず (黒い画面だけ)、MFMessageComposeViewController の didFinishWithResult で MessageComposeResultCancelled を受け取ることです。
これにより、「警告: プレゼンテーションまたは却下の進行中に View Controller から却下しようとしました!」という警告が生成されます。
SMS メッセージ コンポーザーを正しく呼び出して表示するにはどうすればよいですか?
(ユーザーが didSelectRowAtIndexPath を使用してリスト内の行を選択したときに直接呼び出すと、これは完全に機能します)
ここにいくつかのコードがあります:
1- didSelectRowAtIndexPath メソッドで最初の UIActionSheet を呼び出します。
UIActionSheet *popupQuery;
...
[popupQuery showInView:self.view];
2- clickedButtonAtIndex メソッドで 2 番目の UIActionSheet を呼び出します。
UIActionSheet *popupQuery2;
...
[popupQuery showInView:self.view];
3-同じメソッドから、メッセージ コンポーザを呼び出します。
[self sendSMS:@"" recipientList:[phoneNumbers objectAtIndex:buttonIndex]];
メッセージ composer を表示するメソッド:
(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];
}
}