如何在 iOS 中的启动屏幕顶部显示警报视图?
How to show an alert view on the top of the launch screen in iOS?
我正在使用 LaunchScreen.storyboard
来显示启动画面,它只是一个静态图像。现在的问题是,如果不满足特定条件,我想在此初始屏幕的顶部显示警报。为此,我做了以下代码。但不幸的是,警报仅在启动画面之后显示。 如何在初始屏幕顶部显示警报? 到目前为止,这是我正在实施的以下代码,但初始屏幕不显示警报它仅在初始屏幕后显示。
func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
if conditionMet
{
print("Condition met!")
}
else
{
let storyboard : UIStoryboard = UIStoryboard(name: "Launch Screen", bundle: nil)
let launchScreenCtrler = storyboard.instantiateViewController(identifier: "LAUNCH_SCREEN")
let alertViewFrame = CGRect(x: 100, y: 300, width: 120, height: 80)
let newView : UIView = UIView(frame: alertViewFrame)
launchScreenCtrler.view.addSubview(newView)
launchScreenCtrler.view.bringSubviewToFront(newView)
alert.show(launchScreenCtrler, sender: newView)
}
}
启动屏幕不支持任何代码插入,它只是从界面生成器呈现的“图像”屏幕,它在应用程序本身加载之前加载。我建议使用其他一些 UIViewController
,它看起来与您的 LaunchScreen
相同,并在 launchScreen 之后立即显示,在此 'standard' UIViewControler
上,您可以像往常一样执行任何您想要的代码。
您无法控制在 Launch Screen
期间可见的内容或显示的时间。
这是你应该做的 -
- 创建一个名为
SplashViewController
的新屏幕,其布局与 LaunchScreen.storyboard
相同。
- 确保此
SplashViewController
是用户在应用程序中看到的第一个屏幕。
- 在此屏幕中,您现在可以完全控制要执行的操作 - 显示警报、任何其他动画等。
- 如果您发现需要显示警报,请进入带有警报的新流程。
- 如果您发现不需要显示警报,您可以进入没有警报的旧流程。
首先可以在View Controller 上显示Alert 和
我认为您应该使用 UIAlertController,它是一个向用户显示警报消息的对象
以下是您可以尝试的代码,它将在 ViewController
顶部显示警报
let alert = UIAlertController(title: "Your title", message: "Your message", preferredStyle: .alert)
let ok = UIAlertAction(title: "OK", style: .default, handler: nil)
alert.addAction(ok)
DispatchQueue.main.async {
self.present(alert, animated: true)
}
- 这里的 self 指的是我的 mainClass:ViewController,我必须在上面显示警报,如果我在后台或另一个线程中进行大量操作,则调度队列用于显示我的 UI UI 只能在主线程上更新。
我正在使用 LaunchScreen.storyboard
来显示启动画面,它只是一个静态图像。现在的问题是,如果不满足特定条件,我想在此初始屏幕的顶部显示警报。为此,我做了以下代码。但不幸的是,警报仅在启动画面之后显示。 如何在初始屏幕顶部显示警报? 到目前为止,这是我正在实施的以下代码,但初始屏幕不显示警报它仅在初始屏幕后显示。
func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
if conditionMet
{
print("Condition met!")
}
else
{
let storyboard : UIStoryboard = UIStoryboard(name: "Launch Screen", bundle: nil)
let launchScreenCtrler = storyboard.instantiateViewController(identifier: "LAUNCH_SCREEN")
let alertViewFrame = CGRect(x: 100, y: 300, width: 120, height: 80)
let newView : UIView = UIView(frame: alertViewFrame)
launchScreenCtrler.view.addSubview(newView)
launchScreenCtrler.view.bringSubviewToFront(newView)
alert.show(launchScreenCtrler, sender: newView)
}
}
启动屏幕不支持任何代码插入,它只是从界面生成器呈现的“图像”屏幕,它在应用程序本身加载之前加载。我建议使用其他一些 UIViewController
,它看起来与您的 LaunchScreen
相同,并在 launchScreen 之后立即显示,在此 'standard' UIViewControler
上,您可以像往常一样执行任何您想要的代码。
您无法控制在 Launch Screen
期间可见的内容或显示的时间。
这是你应该做的 -
- 创建一个名为
SplashViewController
的新屏幕,其布局与LaunchScreen.storyboard
相同。 - 确保此
SplashViewController
是用户在应用程序中看到的第一个屏幕。 - 在此屏幕中,您现在可以完全控制要执行的操作 - 显示警报、任何其他动画等。
- 如果您发现需要显示警报,请进入带有警报的新流程。
- 如果您发现不需要显示警报,您可以进入没有警报的旧流程。
首先可以在View Controller 上显示Alert 和 我认为您应该使用 UIAlertController,它是一个向用户显示警报消息的对象 以下是您可以尝试的代码,它将在 ViewController
顶部显示警报let alert = UIAlertController(title: "Your title", message: "Your message", preferredStyle: .alert)
let ok = UIAlertAction(title: "OK", style: .default, handler: nil)
alert.addAction(ok)
DispatchQueue.main.async {
self.present(alert, animated: true)
}
- 这里的 self 指的是我的 mainClass:ViewController,我必须在上面显示警报,如果我在后台或另一个线程中进行大量操作,则调度队列用于显示我的 UI UI 只能在主线程上更新。