2009-12-16 26 views
44

Tôi đang gọi MFMailComposeViewController từ số UITableViewController. Vấn đề là phương pháp đại biểu không bao giờ được gọi là khi tôi chọn Hủy hoặc Gửi nút trong Mail soạn cửa sổ:Không thể loại bỏ MFMailComposeViewController, đại biểu không được gọi là

mailComposeController:(MFMailComposeViewController*)controllerdidFinishWithResult 

Đây là lớp xem bảng:

@implementation DetailsTableViewController 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (indexPath.section==0 && indexPath.row==4) { 
     //SEND MAIL 
     MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init]; 
     controller.mailComposeDelegate = self; 
     if ([MFMailComposeViewController canSendMail]) { 
      [controller setSubject:[NSString stringWithFormat:@"Ref %@",[item objectForKey:@"reference"]]]; 
      [controller setMessageBody:@" " isHTML:NO]; 
      [controller setToRecipients:[NSArray arrayWithObject:[item objectForKey:@"email"]]]; 
      [self presentModalViewController:controller animated:YES]; 
     } 
     [controller release];  
    } 
} 

- (void)mailComposeController:(MFMailComposeViewController*)controllerdidFinishWithResult:(MFMailComposeResult)result error:(NSError*)error { 
    // NEVER REACHES THIS PLACE 
    [self dismissModalViewControllerAnimated:YES]; 
    NSLog (@"mail finished"); 
} 

Ứng dụng này doesn' t sụp đổ. Sau khi nhấn nút Hủy hoặc Gửi, Cửa sổ Soạn thư sẽ ở lại trên màn hình với các nút bị tắt. Tôi có thể thoát khỏi ứng dụng bằng cách bấm phím Home.

Tôi có thể mở biểu mẫu Chế độ xem phương thức khác TableView chứ không phải MailCompose.

Trả lời

14

phương pháp chữ ký của bạn là không chính xác:

- (void)mailComposeController:(MFMailComposeViewController*)controllerdidFinishWithResult:(MFMailComposeResult)result error:(NSError*)error 

nên là:

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error 
+0

Tôi tin rằng đây chỉ là lỗi đánh máy trong câu hỏi của anh ấy. –

202

Hãy chắc chắn rằng bạn sử dụng

controller.mailComposeDelegate = self; 

và không

controller.delegate = self; 
+1

Mẹo tốt, được yêu cầu cho tôi để làm cho nó hoạt động. – maralbjo

+1

+1 Cảm ơn nó hoạt động! – Saawan

+12

Ước gì tôi có thể upvote hai mươi lần. Tại sao bạn làm điều này, Apple ?! – Tim

4

Tham khảo bài viết này để thực hiện đầy đủ: http://www.ioscreator.com/tutorials/send-email-from-an-app

đang làm việc sau khi thực hiện xóa bước phản đối một:

#import <MessageUI/MFMailComposeViewController.h> 

@interface SettingsTableViewController() <MFMailComposeViewControllerDelegate, UITextFieldDelegate, UITextViewDelegate> 

@end 


@implementation SettingsTableViewController 
// add default methods 

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSInteger sectionNum = indexPath.section; 
    NSInteger rowNum = indexPath.row; 
    if (sectionNum == 2 && rowNum == 1) { 
     MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init]; 
     controller.mailComposeDelegate = self; 
     if ([MFMailComposeViewController canSendMail]) { 
      [controller setSubject:[NSString stringWithFormat:@"Invitation to Northstar app"]]; 
      [controller setMessageBody:@" " isHTML:NO]; 
//   [controller setToRecipients:[NSArray arrayWithObject:[item objectForKey:@"email"]]]; 
      //presentViewController:animated:completion: 
      [self presentViewController:controller animated:YES completion:NULL]; 
     } 
    } 
} 
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error 
{   
    NSLog (@"mail finished"); 
    [self dismissViewControllerAnimated:YES completion:NULL]; 
} 

@end 
+0

Bài viết này rất hữu ích: http://www.ioscreator.com/tutorials/send-email-from-an-app – Rajeev

0

tôi phải đối mặt với cùng một vấn đề và đang tìm kiếm một sửa chữa từ 2 ngày qua sau đó tôi tìm thấy một sửa chữa bản thân mình và bạn sẽ không tin nó nhỏ như thế nào.

Trong trường hợp của tôi bộ điều khiển xem (nói 'DetailsTableViewController' theo câu hỏi này) từ nơi tôi đã trình bày MFMailComposeViewController đã được trình bày từ một số bộ điều khiển xem khác (nói 'BaseViewController').

Sự cố nằm trong 'modalPresentationStyle' của 'DetailsTableViewController' trong khi trình bày nó từ BaseViewController.

Khoảnh khắc tôi đã thay đổi nó từ 'UIModalPresentationFormSheet' thành 'UIModalPresentationPageSheet' (cho rằng vấn đề bất cứ điều gì khác hơn là 'UIModalPresentationFormSheet') vấn đề đã được giải quyết và phương pháp đại biểu điều khiển tử bắt đầu bắn như thường lệ.

Lưu ý: Tôi đã gọi phương thức bên dưới trong 'DetailsTableViewController' (cho ví dụ này) để nó không thực sự quan trọng đối với tôi 'modalPresentationStyle' tôi đang sử dụng.

- (void)viewWillLayoutSubviews{ 
    [super viewWillLayoutSubviews]; 
    self.view.superview.bounds = CGRectMake(0, 0, 1024, 768); 
    self.view.superview.backgroundColor = [UIColor clearColor]; 
} 
Các vấn đề liên quan