2012-03-16 1 views
0

테이블 뷰를 표시하는 뷰 컨트롤러가 있습니다. 벤처 캐피탈이 사용자에게 전송 SMS보기를 표시하기 위해 다른 VC를 호출이 SMS에 대한 코드는 VC는 다음과 같습니다 MFMessageComposeViewController가 표시되고 해제 된 후 뷰가 올바르게 표시되지 않음

- (void) sendSMSWithBody: (NSString*) body andRecipients: (NSArray*) recipients 
{ 
    MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init]; 
    if ([MFMessageComposeViewController canSendText]) 
    { 
     controller.messageComposeDelegate = self; 
     controller.body = body; 
     controller.recipients = recipients; 
     [[UIApplication sharedApplication].delegate.window.rootViewController addChildViewController:self]; 
     [self presentModalViewController:controller animated:YES]; 
    } 
} 

- (void) messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
    [[UIApplication sharedApplication].delegate.window.rootViewController removeFromParentViewController];  
} 

(나는 sharedApplication에 대한 호출이 조금 해키 알고 있지만 지금은 충분합니다. rootViewController 테이블 뷰 컨트롤러에 설정 루트 컨트롤러)

내가 지금처럼 테이블 VC에서 SMS VC를 호출하고이있는 UINavigationController가 있습니다 :

- (void) viewDidAppear:(BOOL)animated 
{ 
    static BOOL presentedSMSVC = NO; 
    if (!presentedSMSVC) 
    { 
     SendSMSController *sendSMS = [[SendSMSController alloc] init]; 
     [sendSMS sendSMSWithBody:@"body" 
        andRecipients:[NSArray arrayWithObject:@"123456789"]]; 
     presentedRegisterVC = YES; 
    } 
} 

문제는 그 사용자는 SMS를 전송 한 후 테이블 뷰 셀이 표시되지 않습니다.

내가보기/테이블을 새로 고쳐야하므로 사용자가 SMS를 보낼 때 호출 된 첫 번째 VC에 프로토콜 콜백을 추가 한 다음 콜백 호출에서 프로토콜 콜백을 추가해야한다고 생각했습니다. [self.tableView reloadData] 그러나 그것은 아무런 효과가 없었다.

그래서 나는 중간 클래스 제거와 같은 직접 SMS보기를 표시하는 테이블 뷰 편집있어 : didFinishWithResult : 전화를받을 않습니다

- (void) viewDidAppear:(BOOL)animated 
    { 
    static BOOL presentedRegisterVC = NO; 
    if (!presentedRegisterVC) 
    { 
     MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init]; 
     if ([MFMessageComposeViewController canSendText]) 
     { 
      controller.messageComposeDelegate = self; 
      controller.body = @"body"; 
      controller.recipients = [NSArray arrayWithObject:@"12345678"]; 
      [self presentModalViewController:controller animated:NO]; 
     } 
    } 
} 


- (void) messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result 
{ 
    [self dismissModalViewControllerAnimated:NO];  
} 

그러나 messageComposeViewController하지만 지금은 MFMessageComposeViewController이 (해고하지 않습니다

)

두 방법 모두의 문제점은 무엇입니까?

: 제 변종 감사

+0

나는 또한 현재를 변경하고 줄을 [self.navigationController presentModalViewController 및 dismiss]로 닫으려고 시도했지만 여전히 두 번째 업데이트 된 변종에서는 닫지 않습니다. – Gruntcakes

답변

0

는 I로 변경 [자기 presentViewController : 컨트롤러 애니메이션 : YES 완료 : 닐]; [self dismissViewControllerAnimated : 예 완료 : nil];

그리고 그 방법은 첫 번째 방법에 적용하지 않았습니다.

+0

두 번째 변형을 사용하더라도 모달 뷰를 해제 할 수 있지만 여전히 주 뷰 컨트롤러는 뷰를 다시 그리지 않습니다. 나는 기계가 부모 컨트롤이 필요한 동작을하도록 어떻게 든 고지되도록 UINavigationController와 같이 parentViewController 속성을 올바르게 설정 한 클래스에서만 작동한다고 생각합니다.예를 들어, 창을 회전 (장치 회전)하면 주보기가 다시 그려집니다. – lef

0

비슷한 UI 문제가 발생했습니다. 필자의 경우 : 컨트롤러, AF는 MFMessageComposeController를 표시하고 해제하는 코드를 작성했는데 활성 컨트롤러로 직접 사용되지 않고 A.view를 다른 컨트롤러보다 하위 뷰로 사용하고 있다고 가정 해 보겠습니다.

[self presentViewController:composeVC animated:YES completion:nil]; 

그러나 다음과 같은 해결 내 문제 작성 : 그래서 다음을 작성 컨트롤러 나 뷰를 왜곡 된 말을

[self.customTabbarNavigation presentViewController:composeVC animated:YES completion:nil]; 

customTabbarNavigation을, 컨트롤러 B는 ANS 실제로 탐색 컨트롤러이었다이었다 제어기 A의 시야가 보일 때 활성화되었습니다.

composeVC를 삭제하기 위해 동일한 변경을해야했습니다.