3

我一直在尝试在 iOS 上显示敬酒消息。我所做的是,当任何通知出现时,我只需获取导航控制器视图并为我的 toast 消息添加一个子视图并显示。

    UIView *top_view = self.navigationController.view;
    [top_view showToast:string];

一切正常。但是我的吐司视图没有添加到键盘上(如果键盘在前面)。任何想法可能是什么问题......一点帮助可能会节省我的时间......谢谢......

4

6 回答 6

9

您可以通过将子视图添加到主窗口来显示 toast。

UIWindow *toastDisplaywindow = [[[UIApplication sharedApplication] delegate] window];;
for (UIWindow *testWindow in [[UIApplication sharedApplication] windows]) 
{
   if (![[testWindow class] isEqual:[UIWindow class]]) 
    {
       self.toastDisplaywindow = testWindow;
       break;
    }
}
[toastDisplaywindow showToast:string];

如果正在显示键盘,它将显示为一个单独的窗口,位于您通常的主窗口上方。因此进行检查以确定是否正在显示键盘。如果是,则在该窗口中添加 toast 消息,否则在主窗口中。

我在此链接中找到了另一种方法,使用该方法您可以直接访问键盘的 UIView(如果需要)。

于 2013-06-18T06:11:13.687 回答
8

您必须将您的子视图添加到:

UIWindow *window = [UIApplication sharedApplication].windows.lastObject;

它位于键盘顶部。

于 2014-06-20T08:06:08.657 回答
3

通常键盘视图不是主窗口的一部分。当您专注于任何文本字段时,它会出现在新窗口中。

尝试以下代码来访问您的键盘视图。

[[[UIApplication sharedApplication] windows] objectAtIndex:1]

请记住,这仅在您的屏幕上有键盘时才有效。

于 2013-06-18T06:27:40.030 回答
2

另一种方法是添加自定义 UIWindow,然后将其 WindowLevel 设置为最后一个窗口的 +1。

像这样的东西

NSArray *windows = [[UIApplication sharedApplication] windows];  
UIWindow *lastWindow = (UIWindow *)[windows lastObject];  
myWindow.windowLevel = lastWindow.windowLevel + 1;

看看这个话题 https://forums.developer.apple.com/thread/16375

于 2016-10-17T14:08:40.097 回答
1

Swift3 更新

UIApplication.shared.windows.last

于 2017-06-13T07:33:26.457 回答
0

在 iOS9 中,Adithya 的回答是行不通的,

UIWindow *window = [UIApplication sharedApplication].windows.lastObject;

运作良好

于 2015-11-27T08:45:27.487 回答