MailComposer를 시작하는 클래스를 만들었 기 때문에 다양한 종류의 전자 메일을 생성 할 때 내 iPhone 응용 프로그램이 한 곳만 남을 수 있습니다. 사전 채워진 주소가있는 것도 있고 그렇지 않은 주소도 있습니다.iPhone MailComposer 클래스 UIViewController dismissModalViewControllerAnimated issues
클래스가 UIViewController를 구현하는 것을 원하지 않지만 MailComposer의 대리인이 될 수 있도록해야합니다. 그렇지 않으면, 내 클래스를 호출하는 뷰 컨트롤러는 MailComposer의 위임자가되어야합니다.
내 클래스가 뷰 컨트롤러가되는 단점은 ModComposer를 모달 식으로 가져 오기 전에 화면에로드해야한다는 것입니다. 불행하게도 뷰 컨트롤러는 투명 할 수 없습니다. 그 효과는 MailComposer가 나타나기 전에 화면에 무엇이 있든 잠시 동안 단색의 흰색보기 컨트롤러로 덮히는 것입니다.
필자는 MailComposer가 사라진 후에 화면을 차지하는 빈보기 컨트롤러가 남아 있습니다. 나는이 호출하여 자체 내에서 제거 할 수 있어야한다고 :
[self.parentViewController dismissModalViewControllerAnimated:NO];
을하지만 그건 끔찍한 죽음을 죽는다 :
내 클래스가 "...로드 43365 개 스택 프레임을"- 미리 채우고 MailComposer를 시작하는 UIViewController - parentViewController의 손실 된 트랙? 내가 그것을 테스트했기 때문에 그것은 무효가 아닙니다. MailComposer 멀리 갈 수 있도록 방법을, 그리고 그렇게하려면, : 오류 : didFinishWithResult을 : 현재 뷰 컨트롤러 내에서 실행으로... 클래스 내부
// My class is called Email.
Email *oEmail = [[[Email alloc] init] retain];
// Red, to remind myself that I'd like to someday learn to make it transparent.
oEmail.view.backgroundColor = [UIColor redColor];
// Pre-fill whatever fields you want, and specify attachments.
oEmail.EmailSubject = @"I am truly stumped";
// This has to go on screen first.
[self presentModalViewController:oEmail animated:NO];
// Then this can happen, which brings up the MailComposer.
[oEmail f_SendEmail];
// Commenting out the next line didn't help, so I turned it back on.
[oEmail release];
, 당신은 mailComposeController 필요 클래스는 MFMailComposeViewControllerDelegate 여야합니다. 여기에 무슨 일이 일어나는가 :
// This gets rid of the mail composer.
[self dismissModalViewControllerAnimated:YES];
// This never fails to get rid of other modal view controllers when called
// from within those controllers, but boy does it not work here.
[self.parentViewController dismissModalViewControllerAnimated:NO];
당신이 나를 도울 수 있다면, 나는 정말로 감사 할 것입니다! 대신 나는 당신의 '이메일'컨트롤러에 대한 대리자를 설정합니다
[self.parentViewController dismissModalViewControllerAnimated:NO];
를 호출
"43365 스택 프레임로드 중 ..."은 무한 재귀를 나타냅니다. 디버거를 살펴보면이 문제를 일으키는 방법의 사이클을보아야합니다. –
또한 "보기 컨트롤러는 투명 할 수 없습니다"라는 것은 기술적으로 잘못되었습니다. 뷰 컨트롤러는 뷰의 논리를 관리하기위한 객체 일뿐입니다. 보기 자체는 투명, 반투명 또는 전체 화면이 아닐 수 있습니다. 당신이 말하는 것은 -presentModalViewController : animated : 메서드입니다.이 메서드는 컨트롤러의 뷰 뒤에서 불투명 한 흰색 뷰를 화면에 나타낼 때 나타납니다. –