如何从一个UITextView激活键盘上的(二级)的UIWindow

问题描述:

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

然后我把它在另一个的UIWindow(比如:newWindow)(主/根/键一个被称为self.window(单一视图应用程序的顶部)。)。

但是现在,当我点击的UITextView,键盘不显示。

一切正常,如果我这样做:

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

但键盘立即显示(因为我设置becomeFirstResponder),这是不好的。 但是,如果我删除了becomeFirstResponder行,键盘不会显示在所有

如果我移动[self.window addSubview:newWindow]线以上,那么无论我做什么,键盘没有被激活...

[self.window addSubview:newWindow]。 //这是应该如何...但是,
[myTextView setEditable:YES];
[myTextView becomeFirstResponder]; //甚至当我进入这个,它不工作:-(

我试过[newWindow makeKeyAndVisible]什么都没有。我试图在UITextView中平添一份委托和检测触摸(或手势),他们工作(我得到了包括NSLog的消息),但是再次没有键盘,我甚至试图在newWindow之上添加另一个(主窗口的)字段(以便在主窗口元素的顶部),仍然没有运气...

我缺少什么

你不应该添加一个UIWindow作为一个子视图相反,窗口都显示通过调用 - [的UIWindow makeKeyAndVisible],或者 - [的UIWindow setHid如果您不希望它接收关键事件,请将其删除。

虽然您很少需要使用多个窗口。只是使用一个普通的UIView添加,作为一个子视图将在许多情况下。

编辑:我对“分配给一个屏幕”前有一个令人困惑的言论。 UIWindow有一个属性“屏幕”,如果你想在另一个屏幕上显示窗口而不是主屏幕,你可以指定它。不过,您不需要关心您的用例。 “

+0

”给窗口分配一个屏幕“......你是什么意思?怎么样? 我了解你的评论的第一部分,但不是第二部分。 我应该添加myTextView到另一个视图(作为子视图),将它们分组,我明白。但不是“将窗口分配给窗口”部分。 – Gik 2012-05-03 09:27:41

+0

很好的答案。有用。 ! – 2013-07-04 14:50:03