【问题标题】:UIView not appearing over keyboard?UIView 没有出现在键盘上?
【发布时间】:2012-03-02 00:51:11
【问题描述】:

我有这个代码:

JMenuController *menuController = [[JMenuController alloc] init];
    NSArray *buttonsArray = [NSArray arrayWithObjects:@"From Libary", @"Take Photo or Video", nil];
    [menuController showMenuWithTitle:@"Add Media" ButtonTitles:buttonsArray animated:YES];
    self.currentMenuType = JCreateMenuTypeNewMedia;

    [[[[UIApplication sharedApplication] delegate] window] addSubview:menuController];

问题是,视图出现在键盘下方,它已经在屏幕上。我该如何解决这个问题?

【问题讨论】:

  • 吓了一跳,还以为是Oracle推出了“UISwing”呢!

标签: iphone objective-c iphone-softkeyboard


【解决方案1】:

在键盘顶部显示某些视图的最简单方法是将该视图放在UIWindow 中,您将其windowLevel 属性设置为UIWindowLevelAlert。比如:

UIView *myView = [[UIView alloc] initWithFrame:rect];

UIWindow *myWindow = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
myWindow.windowLevel = UIWindowLevelAlert;
[myWindow addSubview:myView];

[myWindow makeKeyAndVisible];

如果您使用的是 ARC,请确保对 myWindow 保持强引用。否则,它将自动释放,因此不会添加到您的应用程序窗口中。

(这就是 UIActionSheet 和 UIAlertView 在内部的工作方式。当其中一个可见时,请查看 [UIApplication sharedApplication].windows,您会看到它们创建的窗口的 windowLevel 设置为 UIWindowLevelAlert。)

【讨论】:

  • 谢谢!那么我还需要通过[myWindow setHidden:YES]; 隐藏它
  • 谢谢!这对我有用,但是一旦我关闭视图,我就无法与我的 UI 交互。键盘中也有一个奇怪的行为。我的焦点仍然在 UItextField 中,如果我按任何键,我的文本字段没有变化,但如果我按退格键,我的文本将被删除。
【解决方案2】:

好吧,我花了一段时间才明白你想做什么。您有 2 个选项。

  • 退出键盘并显示带有按钮的视图。

  • 使用 UIActionSheet 在键盘上显示按钮,就像在按下相机向某人发送图片时在消息应用程序中所做的那样。

我会推荐后者。

编辑: 看看你的自定义 UIActionSheet Show a view over the keyboard

【讨论】:

  • 我基本上已经制作了自己的操作表,而不是使用默认的。所以我想复制 UIActionSheet 的行为。
【解决方案3】:

键盘存在于自己的窗口中。要将内容放在上面,您要么必须将内容放在键盘的窗口中(这不是受支持的行为),要么创建另一个窗口并将其放在键盘上。

【讨论】:

    猜你喜欢
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 2011-11-01
    • 1970-01-01
    • 2012-07-02
    相关资源
    最近更新 更多