MFMailComposeViewController被关闭后,UITextField无法显示键盘

时间:2013-03-24 16:53:23

标签: iphone keyboard uitextfield mfmailcomposeviewcontroller

我有一个问题,键盘在显示UITextField时显示正确,但在MFMailComposeViewController显示和解除后无法显示。光标出现在文本字段中,但没有键盘。

基本上,当用户点击“创建预设”按钮时,UIView会添加到包含UITextField的当前视图中:

[self.view addSubview:createPresetView];
[presetNameField becomeFirstResponder];

有效。用户可以添加多个新预设,每次添加视图,文本字段成为第一响应者,键盘出现。为了排除presetNameField不在视图层次结构中的问题,我还尝试在1秒延迟后执行becomeFirstResponder - 结果相同。

接下来,可以使用标准MFMailComposeViewController:

通过电子邮件共享预设
MFMailComposeViewController *mailView = [[MFMailComposeViewController alloc] init];
[mailView setMailComposeDelegate:appController];
[mailView setSubject:@"New preset"];
[mailView setMessageBody:@"\n\nMail from app" isHTML:NO];
[appController presentModalViewController:mailView animated:YES];

据我所知,邮件撰写视图正确地解散了:

[controller.view endEditing:YES]; // I added this as a test to ensure the mail view resigns first responder, no difference.
[self dismissModalViewControllerAnimated:YES];
[controller release];
controller = nil;

但现在“创建预设”按钮会添加带有文本字段的视图,将文本字段设置为第一响应者,但不会显示任何键盘。

当我在文本字段中成为第一个响应者时,我已经检查了发生了什么。文本字段本身有效,并向canBecomeFirstResponder返回YES。

我发现的唯一潜在线索是[presetNameField becomeFirstResponder] 总是返回NO(甚至在显示邮件视图之前)。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

MFMailComposeViewController按照您的预期接收第一个响应者。没有内置机制将firstResponder返回到您的文本字段。但你可以在viewWillAppear:上完成。

你甚至可以这样做,只有从这样的呈现视图控制器(如MFMailCompose)返回时才会这样做:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    // this is optional, if you care about context of presentation
    if (!self.isBeingPresented) {  // if we're not on our way up the stack of vcs
        [self.presetNameField becomeFirstResponder];
    }
}