2012-03-18 46 views
1

我的應用程序有一個公共類,只要從多個NIB中的任何一個點擊「聯繫我們」,就會顯示一個actionSheet。IOS5:如何從NSObject類中調用電子郵件

如果用戶從actionSheet彈出窗口中選擇「通過電子郵件發送」,我想從同一個公共類中調用電子郵件方法。研究後,我實現了這個:

-(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]; 
} 

這將啓動但新的電子郵件,:作爲模態的看法是

  1. 的didFinishWithResult不起作用在發送電子郵件或按下取消按鈕後不會刪除

  2. 我得到這個警告:從不兼容的類型'UIViewController * __ strong'分配給'id'controller.mailComposeDelegate = rootViewController;

幫助讚賞。

回答

2

您需要將您的rootViewController設置爲採用代表MFMailComposeViewControllerDelegate

即在RootViewController.h文件,這部分增加的界面聲明,以便使它看起來類似於:

@interface RootViewController : UIViewController <MFMailComposeViewControllerDelegate> 
+0

嗨Inafziger。我還沒有創建一個單獨的「RootViewController」類。我在公共類中創建了一個對象「UIViewController * rootViewController」。有沒有辦法使用我擁有的,或者是唯一的解決方案來使用一個單獨的類(這似乎過於複雜)。 – Jeremy 2012-03-20 00:51:20

+0

糟糕,我沒有看到。您可以使用此代碼所在的公共類來做同樣的事情。只需更改控制器即可。 mailComposeDelegate自我。 – lnafziger 2012-03-20 02:29:16

+0

這個工作適合你嗎? – lnafziger 2012-03-23 02:36:12

相關問題