My Appには、多くのNIBのいずれかから「お問い合わせ」をクリックするたびにactionSheetを表示する共通クラスがあります。IOS5:NSObjectクラスから電子メールを呼び出す方法
ユーザがactionSheetポップアップから "Email Us"を選択した場合、私は同じ共通クラスから電子メールメソッドを呼びたいと思います。私はこの実装調査した:これは、新しい電子メールを起動します
-(void)SendEmail {
rootViewController = (UIViewController*)
[(AppDelegate*)[[UIApplication sharedApplication] delegate] viewController];
// compose
MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init];
controller.mailComposeDelegate = rootViewController;
//format message
NSArray *recipientsArray = [[NSArray alloc] initWithObjects:@"[email protected]", nil];
[controller setToRecipients:recipientsArray];
[controller setSubject:[NSString stringWithFormat:@"A question about %@",string]];
[controller setMessageBody:outputMutString isHTML:YES];
//send
if (controller) [rootViewController presentModalViewController:controller animated:YES];
}
// didFinishWithResult
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error;{
if (result == MFMailComposeResultSent) {
}
[rootViewController dismissModalViewControllerAnimated:YES];
}
を、しかし:モーダルビューがあるとして
didFinishWithResultは動作しません。電子メールを送信した後、またはキャンセルボタンを押した後も削除されません。
私はこの警告を受け取ります:互換性のないタイプ 'UIViewController * __ strong'から 'id'に割り当てます。 controller.mailComposeDelegate = rootViewController;
ヘルプありがとうございます。
こんにちはInafziger。私は別の "RootViewController"クラスを作成していません。私は共通のクラスにオブジェクト "UIViewController * rootViewController"を作成しました。私が持っているものを使う方法があるのですか、別のクラスを使う唯一の解決策です(複雑すぎるようです)。 – Jeremy
おっと、私はそれを見ませんでした。このコードがある共通クラスでも同じことができます。コントローラを変更するだけです。 mailComposeを自己に削除します。 – lnafziger
これはあなたのために機能しましたか? – lnafziger