2013-03-13 2 views
0

표시되지는, 그것은 (... SMS를 보내 전화) 사용자에게 작업을 요청하는 UIActionSheet를 보여 드리겠습니다.IOS : 사용자가 행을 선택하면 SMS 메시지 작곡가 내가 연락처 목록을 제시하는있는 UITableViewController이

사용자 액션을 선택하고, 그 제 UIActionSheet 전화 번호를 포함하는 다른 UIActionSheet를 보여줄 것이다.

사용자는 전화 번호를 선택하고,이 SMS 메시지 컴포저를 표시한다.

문제는 사용자가 전화 번호를 선택하면, 메시지 작곡가보기 (검은 화면)을 표시하지 않는다는 것입니다, 그리고 나는 MFMessageComposeViewController의 didFinishWithResult에 MessageComposeResultCancelled을받을 수 있습니다. 이 경고를 생성

"경고 : 뷰 컨트롤러에서 기각 프리젠 테이션 동안 또는 기각하는 시도가 진행 중입니다!"

SMS 메시지 작성기를 올바르게 호출하고 표시하려면 어떻게해야합니까?

: didSelectRowAtIndexPath 방법의 첫번째 UIActionSheet에

1 전화 :

여기

(이 사용자가 didSelectRowAtIndexPath와 목록에서 행을 선택 직접 때 내가 그것을 호출하면 완벽하게 작동) 일부 코드입니다 clickedButtonAtIndex 방법에서 제 UIActionSheet에

UIActionSheet *popupQuery; 
... 
[popupQuery showInView:self.view]; 

2- 호 :

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

+0

일부 코드를 추가했습니다 – dzk

+0

실제 iDevice에서 발생합니까 아니면 시뮬레이터에서 방금 테스트 되었습니까? 'canSendText' 현재 장치가 문자 메시지를 보낼 수 있는지 여부를 나타내는 부울 값을 반환합니다. 그러나, canSendText는 시뮬레이터에서 true를 반환 할 수 있습니다. Mac에 메시지 앱이 설치되어있을 수도 있습니다. (_ 추가 질문 http://mby.me/Gw_) –

답변

0

같은 시간에 actionSheet:didDismissWithButtonIndex: 대리자 메서드를 사용하면 메시징 컨트롤러를 표시하기 시작할 때 작업 시트가 숨겨집니다.

다음 코드는 자동으로 취소되지 않은 작성자를 보여줍니다. Cancel 버튼을 누를 때만 MessageComposeResultCancelled의 값인 0이 로그에 표시됩니다. send 버튼을 자동으로 눌러 해킹하려고합니까?

composer from action sheet delegate

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

것은 문제가 없습니다. 앱이 메시지 작성자를 호출 한 직후에 "MessageComposeResultCancelled"를 수신한다고 가정합니다. – dzk

+0

@dzk'actionSheet : didDismissWithButtonIndex :'의 작곡가를 표시 할 때 발생합니까? –

+0

예, 메시지 작성자를 표시하는 대신 다음과 같은 빈 화면이 표시됩니다. http://img594.imageshack.us/img594/7624/screenshot20130302at931.png – dzk