隐藏在View背后的UIAlertView

时间:2013-12-28 01:18:00

标签: ios uialertview

我使用presentModalViewController:animated:方法呈现了一个视图控制器。我们将此视图称为myView。在myView上,我有一个按钮,当点击时,它应该创建一个UIAlertView并显示它。

但是,当我点按此按钮时,会创建alertView,但不会显示在myView的顶部。相反,它隐藏在myView后面。

注意:为了验证alertView是否隐藏在myView后面,我在myView上添加了第二个按钮,当它被点击时,myView视图控制器自行解除(即[self dismissModalViewControllerAnimated:YES])。当myView被解除时,会出现alertView。

知道为什么alertView隐藏在myView背后?

3 个答案:

答案 0 :(得分:1)

我认为在您展示UIAlertView之后,您将在UIWindow上添加子视图。它位于UIWindow层中的UIAlertView之上。

确保您不在UIWindow上添加任何内容,因为这不是一个好习惯。

如果您仍然想要添加子视图,只需发送subviewToBack:

祝你好运

答案 1 :(得分:0)

我有同样的问题。在Controller1中,我呈现Controller2,在Controller2中我创建了一个alertView。但是alertView被置于Controller2的视图之后。

我发现如果我不是从任何viewController创建alertView(通过使用公共函数),alertView将出现在屏幕的前面。

+ (void)alertShow:(NSString *)alertMsg {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:alertMsg
                                                message:nil delegate:self
                                      cancelButtonTitle:nil
                                      otherButtonTitles:nil];

[alert show];

[self performSelector:@selector(dismissAlertView:) withObject:alert afterDelay:2.5];

}

希望它能解决你的问题。

答案 2 :(得分:0)

我也遇到了这个问题。这是间歇性的,但我认为它与在后台线程上显示警报有关。

从Xcode 9开始,Swift 4:

要测试函数是否在主线程上运行,请使用:Thread.current.isMainThread

print("On main thread: \(Thread.current.isMainThread)")

要在主线程上显示提醒或执行任何操作,请使用OperationQueue.main

OperationQueue.main.addOperation {
    // code to perform on main thread
}