0

連絡先のリストを表示する 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];
    }
}
4

2 に答える 2

1

ここにある解決策:MFMessageComposeViewControllerに空白/白い画面が表示される

    controller.recipients = [NSArray arrayWithObject:theRecipients];

theRecipients は、1 つの要素 (選択された電話番号) のみを含む配列でした

于 2013-03-18T15:41:49.360 に答える
0

同時に 2 つのモーダル コントロールを表示したくないactionSheet:didDismissWithButtonIndex:ので、デリゲート メソッドを使用して、メッセージング コントローラーの表示を開始するときにアクション シートが非表示になるようにします。

次のコードは、自動的にキャンセルされない composer を示しています。ボタンを押したときだけ 0、 の値である log を見ることができます。ボタンを自動的に押してハックしようとしていますか?MessageComposeResultCancelledCancelsend

アクション シート デリゲートからのコンポーザー

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];
}
于 2013-03-13T13:16:44.580 に答える