【问题标题】:why UITextField becomeFirstResponder doesn't show keyboard in my child viewcontroller?为什么 UITextField becomeFirstResponder 在我的子视图控制器中不显示键盘?
【发布时间】:2012-06-23 12:27:10
【问题描述】:

在我的第一个 ViewController 中,我将一个 UITextField 设置为成为FirstResponder,并且焦点保持在 TextField 和键盘自动出现的位置。它工作正常。但是然后我在这个 ViewController 中展示了另一个具有 3 个 UITextFields(A、B、C)的子 ViewController,我在这个子 ViewController 中将第一个 UITextField(比如 A)设置为 becomeFirstResponder,焦点保持在 A 但键盘没有出现.我整天搜索所有答案,但没有找到。

这里是代码。

在父VC中,我设置:

TestVC *testVC= [[TestVC alloc] init];
testVC.modalPresentationStyle=UIModalPresentationFormSheet;
[detailvc presentViewController:testVC animated:NO completion:nil];

在子 VC TestVC 中,我设置:

UITextField *v_matcode=[MyViewUtil addTextField:@"" x:10 y:10 width:100 height:40];
[self.view addSubview:v_matcode];
[v_matcode becomeFirstResponder];

这是 addTextField():

+(UITextField *) addTextField:(NSString *)text x:(int)_x y:(int)_y width:(int)_width height:(int)_height {
  UITextField *v_txt = [[UITextField alloc] init];
  v_txt.frame= CGRectMake(_x, _y, _width, _height);
  v_txt.borderStyle = UITextBorderStyleRoundedRect;
  return v_txt;}

v_matcode 有焦点,但键盘没有出现。但是,如果我不将此文本字段设置为 FirstResponder 并让用户点击它,则键盘会正确显示。这是为什么呢?

【问题讨论】:

  • addTextField:”代码是什么样的?到目前为止,看起来您所做的一切都是正确的,但“addTextField:”是一些自定义方法,因此它可能会做一些古怪的事情。
  • 我同意@michael-dautermann,能否请您发布“addTextField:”方法的代码,这可能会有所帮助。
  • 现在无法测试,但尝试将 becomeFirstResponder 的调用封装在 dispatch_async(dispatch_get_main_queue(), ^{ /* call here */});
  • 您似乎正在从不同的控制器(即不是self[detailvc presentViewController:testVC animated:NO completion:nil]; 呈现您的模态视图控制器,detailvc 和视图控制器之间的关系是什么?您正在拨打presentModalViewController 的电话吗?
  • 我猜你是在 loadView 中添加你的 textField。尝试将 becomeFirstResponder 代码移动到 viewDidAppear 中,以便在尝试显示键盘之前视图已经可见。

标签: iphone ipad keyboard


【解决方案1】:

尝试将动画设置为 YES

[detailvc presentViewController:testVC 动画:YES 完成:nil];

【讨论】:

    猜你喜欢
    • 2018-05-27
    • 2017-12-19
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 2011-01-31
    • 2016-11-26
    • 1970-01-01
    • 2015-12-10
    相关资源
    最近更新 更多