如何从(辅助)UIWindow上的UITextView激活键盘

时间:2012-04-12 08:51:50

标签: keyboard uitextview uiwindow addsubview becomefirstresponder

我的iPhone应用程序(基于Xcode的“单一视图应用程序”)有一个UITextView(比如:myTextView),我希望用户能够编辑。我将它设置为可编辑,并且一切正常(我甚至不必调用becomeFirstResponder)。

然后我将它移动到另一个UIWindow(例如:newWindow)(在main / root / key之上,名为self.window(单视图应用程序)。)。

但现在,当我点击UITextView时,键盘不会显示。

如果我这样做,一切都有效:

  

[myTextView setEditable:YES];
  [myTextView becomeFirstResponder]; //丑陋......我不需要它,但我加上它以防万一......   [self.window addSubview:newWindow];

但是键盘会立即显示(因为我设置了firstFirstResponder)并不好看。 但如果我删除了becomeFirstResponder行,键盘就不会显示

如果我移动上面的[self.window addSubview:newWindow]行,那么无论我做什么,键盘都不会被激活......

  

[self.window addSubview:newWindow]; //这应该是怎么样的......但是,
  [myTextView setEditable:YES];
  [myTextView becomeFirstResponder]; //即使我输入它,它也不起作用:-(

我尝试了[newWindow makeKeyAndVisible]。我试图在UITextView上添加一个触摸委托并检测一个触摸(或一个手势),它们工作(我得到了我包含的NSLog消息),但同样没有键盘。我甚至试图在newWindow的顶部添加另一个(主窗口的)字段(以便在顶部有一个主窗口元素),但仍然没有运气......

我错过了什么?

1 个答案:

答案 0 :(得分:3)

您不应该将UIWindow添加为子视图。相反,如果您不希望它接收关键事件,则通过调用 - [UIWindow makeKeyAndVisible]或 - [UIWindow setHidden:NO]来显示窗口。

您很少需要使用多个窗口。只是使用普通的UIView添加添加,在很多情况下,子视图将会这样做。

编辑:在关于"分配到屏幕"之前,我有一个令人困惑的评论。 UIWindow有一个属性" screen",如果你想在除主屏幕之外的另一个屏幕上显示窗口,你可以指定它。但是,您不需要为您的用例关心这一点。