4

테이블보기가 있는데 셀 중 하나에 "연락처"가 표시됩니다. 이 셀을 선택하면 MFMailComposeViewController를 푸시하고 싶습니다.MFMailComposeViewController를 탐색 스택으로 푸시? 모달로 표시되지 않음

이 MFMailComposeViewController는 모달로만 나타납니다. 여기에 어떤 문제가 있습니까?

감사합니다.

관련 코드 파편 :

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 


    MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init]; 
    //*works*//[self.navigationController presentModalViewController:controller animated:YES]; 
    //*broken*//[self.navigationController pushViewController:controller animated:YES]; 

}

오류 내가 얻을 수 있습니다 : "때문에 캐치되지 않는 예외 'NSInvalidArgumentException'응용 프로그램 종료, 이유는 * : '탐색 컨트롤러를 누르면이 지원되지 않습니다 ' * 첫 번째 던지기에서 호출 스택 : "

그래서 이미 navigationController가있는 것처럼 보이고 MFMailComposeViewController는 UIN의 하위 클래스이므로 avController, 다른 navController에 navController를 밀고 있습니다?

내 UI를 일관되게 만들고 싶습니다. 따라서 모달 표현보다는 MFMailComposeViewController를 nav 스택에 푸시하고자합니다.

+0

어떤 방식으로 작동하지 않습니까? 보기가 표시되지 않거나 오류가 발생합니까? – jrturton

답변

3

이다. UINavigationController은 기존 스택에 UINavigationControllerUINavigationController 또는 서브 클래스를 밀어. UINavigationController 모달이 허용 제시하려고하고 예외가 발생합니다.

+0

좋아요, 그렇다면 테이블 뷰 셀에서 "드릴 다운"할 때 MFMailComposeViewController를 가져올 수 없다는 말입니까? 드릴 다운하면 테이블 뷰 셀을 탭하고 다음 뷰 컨트롤러는 화면 하단에서 팝업으로 표시되지 않습니다. MFMailComposeViewController를 오른쪽에서 왼쪽으로 밀어 넣기를 원합니다. 확실히 그런 기본적인 것이 지원됩니까? – user798719

+0

UINavigationController는 UIViewController 개체의 계층 구조를 조작하도록 설계되었습니다. 기존 탐색 스택에 다른 UINavigationController를 추가하면 예기치 않은 결과가 발생합니다. UINavigationController가 제공하는 UINavigationBar를 고려하십시오. 새로운 UINavigationController를 사용하려면 어떤 탐색 표시 줄이 우선해야합니까? 메일 합성보기 컨트롤러를 실제로 푸시해야한다면'mailComposeController.topViewController'를 사용하여 UIViewController 서브 클래스 만 추출 할 수 있습니다. –

0

애플 문서에 따르면

이 뷰 컨트롤러에 의해 관리보기를 표시하려면

은 그래서 당신이하려고하는 것은 뷰 컨트롤러를 표시하기위한 표준 기술을 사용할 수 있습니다 두 경우 모두에서 일해야합니다. 로그를 보셨습니까?

나는 당신이 UINavigationController에 포함되지 일반의 UIViewController를 (사용하는 경우이 일반적으로 발생 때문에있는 navigationController이 전무하지만, 당신이 실제로는 전무하지 않을 수있는 navigationController에 모달 뷰를 제공 내기 것이다.

MFMailComposeViewControllerUIViewController의하지만 UINavigationController의 서브 클래스가 아니기 때문에