2013-03-13 42 views
0

我有一個UITableViewController呈現聯繫人列表,當用戶選擇一行時,它會顯示一個UIActionSheet來詢問用戶一個動作(呼叫,發送短信...)。ios:短消息作曲家沒有顯示

用戶選擇一個動作,並且第一個UIActionSheet將顯示另一個包含電話號碼的UIActionSheet。

用戶選擇一個電話號碼,這應顯示SMS消息編輯器。

問題是當用戶選擇一個電話號碼時,消息編寫器視圖不顯示(只是一個黑屏),並且我收到MFMessageComposeViewController的didFinishWithResult中的MessageComposeResultCancelled。

產生此警告的警告「警告:在演示或解散過程中嘗試從視圖控制器中消除!」

如何正確調用並顯示SMS消息編輯器?

(這完美的作品,如果我把它直接當用戶在didSelectRowAtIndexPath方法列表中選擇一個行)

下面是一些代碼:

1呼籲在didSelectRowAtIndexPath方法方法首先UIActionSheet:

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]; 
    } 
} 
+0

你能後的一些代碼你如何表示/解僱你的視圖控制器?正如你從錯誤信息中看到的那樣,它們被呈現/解散的方式存在問題。 – Petar 2013-03-13 11:26:43

+0

我已經添加了一些代碼 – dzk 2013-03-13 12:46:52

+0

這是發生在一個實際的iDevice上,還是它剛剛在模擬器上測試過? 'canSendText' 返回一個布爾值,指示當前設備是否能夠發送文本消息。 但是,'canSendText'可能會在模擬器上返回true,因爲您可能在Mac上安裝了消息應用程序(參見附加問題http://mby.me/Gw_) – 2013-03-13 12:53:58

回答

0

當你不想嘗試都顯示兩個模態控制同時,使用actionSheet:didDismissWithButtonIndex:委託方法,以便在開始顯示消息傳遞控制器時隱藏操作表。

以下代碼顯示未自動取消的作曲家。 我可以在日誌中看到0這是MessageComposeResultCancelled的值,只有當我按下Cancel按鈕時。你是否試圖通過自動按send按鈕進行破解?

composer from action sheet delegate

MFMessageComposeViewController.h

enum MessageComposeResult { 
    MessageComposeResultCancelled, //0 
    MessageComposeResultSent,  //1 
    MessageComposeResultFailed  //2 
}; 

MyViewController。米

-(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]; 
} 
+0

事情是應用程序在調用消息編輯器後收到「MessageComposeResultCancelled」 – dzk 2013-03-13 13:52:46

+0

@dzk從'actionSheet:didDismissWithButtonIndex:'顯示作曲者時會發生這種情況嗎? – 2013-03-13 14:25:03

+0

是的,而不是顯示消息作曲家,它顯示了一個像這樣的空白屏幕http://img594.imageshack.us/img594/7624/screenshot20130302at931.png – dzk 2013-03-13 14:44:33