0

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

然后我将它移动到另一个 UIWindow(比如:newWindow)(在称为 self.window(单视图应用程序的)的 main/root/key 的顶部)。

但是现在,当我单击 UITextView 时,键盘不显示。

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

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

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

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

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

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

我错过了什么?

4

1 回答 1

3

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

不过,您很少需要使用多个窗口。在许多情况下,只需使用普通的 UIView 添加将其添加为子视图即可。

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

于 2012-04-25T11:11:43.923 回答