2012-03-18 4 views
1

Мое приложение имеет общий класс, который отображает таблицу действий, когда нажимают «Contact Us» из любого из многих NIB.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. Я получаю это предупреждение: присваивание 'id' из несовместимого типа 'UIViewController * __ strong' controller.mailComposeDelegate = rootViewController;

Помогите оценить.

ответ

2

Вам необходимо установить rootViewController как принимающий делегат MFMailComposeViewControllerDelegate.

т.е. в файле RootViewController.h, добавьте эту часть декларации интерфейса так, что он похож на:

@interface RootViewController : UIViewController <MFMailComposeViewControllerDelegate> 
+0

Hi Inafziger. Я не создал отдельный класс «RootViewController». Я создал объект «UIViewController * rootViewController» в общем классе. Есть ли способ использовать то, что у меня есть, или это единственное решение для использования отдельного класса (что кажется чрезмерно сложным). – Jeremy

+0

К сожалению, я этого не видел. Вы можете сделать то же самое с общим классом, в котором находится этот код. Просто измените контроллер. mailComposeDelegate к себе. – lnafziger

+0

Это работало для вас? – lnafziger

Смежные вопросы