我有一个 MFMailComposeViewController 的标准实现。
我已经设置了正确的委托(delegate)协议(protocol),并且在 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: 电子邮件地址,或邮件编写器本身中的任何其他内容,感觉键盘出现正在删除我的 View Controller 的委托(delegate)操作,因为“取消”和“发送”按钮不会触发任何操作。
有什么想法吗?这让我发疯:/
干杯
编辑
这是 getController 的代码:
- (UIViewController *) getController
{
Class vcc = [UIViewController class];
UIResponder *responder = self;
while ((responder = [responder nextResponder]))
if ([responder isKindOfClass: vcc])
return (UIViewController *)responder;
return nil;
}
最佳答案
当 UITextField 成为 FirstResponder 时,您的 Controller 会收到 resignFirstResponder。
为什么要使用“getController”方法?在显示 MFMailComposeViewController 的 ViewController 上创建属性。
关于ios - 出现键盘时 MFMailComposeViewController didFinishWithResult 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28798848/