【发布时间】:2015-03-01 20:45:58
【问题描述】:
我有一个 MFMailComposeViewController 的标准实现。
我已经设置了正确的委托协议,并且在 didFinishWithResult 方法上发生了日志。
见:
mailComposer = [[MFMailComposeViewController alloc] init];
[mailComposer setSubject:emailTitle];
[mailComposer setMessageBody:messageBody isHTML:YES];
mailComposer.mailComposeDelegate = self;
[[self getController] presentViewController:mailComposer animated:YES completion:NULL];
- (void) mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
NSLog(@"mail dismiss");
[[self getController] dismissViewControllerAnimated:YES completion:NULL];
}
这可以正确显示邮件编写器,并且一切正常。意思是,如果我按下“取消”按钮,didFinishWithResult 方法会被调用并且 mailComposer 会被关闭。
但是,如果我尝试在邮件编写器本身中输入任何内容,例如 TO: 电子邮件地址或其他任何内容,感觉就像出现的键盘正在删除我的视图控制器的委托操作,因为“取消”和“发送”按钮不会触发任何操作。
有什么想法吗?快把我逼疯了:/
干杯
编辑
getController 的代码如下:
- (UIViewController *) getController
{
Class vcc = [UIViewController class];
UIResponder *responder = self;
while ((responder = [responder nextResponder]))
if ([responder isKindOfClass: vcc])
return (UIViewController *)responder;
return nil;
}
【问题讨论】:
-
[self getController]到底在做什么? -
@DanielStorm - 它获取当前视图控制器,因为我正在从 UIView 执行此操作。我已经更新了上面的代码以显示该方法。
-
只是在黑暗中拍摄,但是否有可能从主线程以外的线程调用您的 presentViewController?
-
和
[self presentViewController..]没有[[self getController] presentVC..]就不能工作? -
您是否尝试过 [self presentViewController.. while presenting 和 [self dismissViewController.. for dismissing?
标签: ios objective-c mfmailcomposer