ios - 出现键盘时 MFMailComposeViewController didFinishWithResult 问题

标签 ios objective-c mfmailcomposer

我有一个 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/

相关文章:

java - 读取/写入 pbxproj/xcodeproj 文件的库?

ios - 无法使用解雇(动画: true,完成:nil)解雇邮件编辑器并且解雇ViewControllerAnimated不会作为选项出现

ios - 为 UIPickerView 创建公制和英制高度数组?

ios - 使用 Objective C AppDelegate 在单个 Swift VC 中锁定方向

ios - 在显示VC代码不起作用后删除VC

ios - Swift:如何确定何时发送电子邮件以更新 TableView ?

objective-c - MFMailComposer - 附件大小

ios - JSON 请求后使用新数据刷新 View Controller

python - 如何在 iOS Appium 上按 "OK"弹出位置

android - 如何在 EvaluateJavascript 中将参数作为带换行符\n 的字符串传递?