2013-03-24 73 views
2

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

基本上,一个UIView被添加到包含的UITextField当用户轻敲一个“创建预设”按钮当前视图:

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

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

接下来,预设可以通过电子邮件共享,使用标准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; 

但现在创建预设按钮添加视图和文本字段,将文本字段设置为第一响应者,但不会出现任何键盘。

我已经检查出发生了什么,当我做文本字段成为FirstFoundResponder。文本字段本身是有效的,并返回YES到canBecomeFirstResponder。

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

有什么建议吗?

+0

你找到一个解决办法? – 2015-02-26 10:04:04

回答

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]; 
    } 
} 
+0

谢谢,但是textfield不需要自动成为第一响应者(只有当用户试图创建新的预设,并且应用程序要求输入名称时才会发生)。问题在于,textfield在成为第一响应者时不显示键盘(但仅在显示MailComposeView之后)。 – psonice 2013-03-24 17:12:16