UIAlertController 仅在 viewDidAppear 完成调用时可见
UIAlertController visible only when viewDidAppear has finished its call
我正在尝试在我的视图加载时显示 UIAlertController
。我知道在 viewDidLoad()
或 viewWillAppear()
期间这是不可能的,因为在执行这些功能期间视图不在层次结构中。但是,如果在 viewDidAppear()
之前添加视图,那么在调用该函数期间应该可以显示我的 UIAlertController
。
因此,我尝试了这个:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
var AlertShow = false
print(Configuration)
if !AlreadyLoad {
if Configuration.count == 0 {
AlertShow = true
print("First lunch")
let Alert = UIAlertController(title: "Premier lancement", message: "C'est la première fois que l'application est lancée. Cette dernière va télécharger tous les articles.\nVeuillez patienter.", preferredStyle: .Alert)
let OkAction = UIAlertAction(title: "Ok", style: .Default) { (action) in }
Alert.addAction(OkAction)
self.presentViewController(Alert, animated: true, completion: {
AlertShow = false
})
}
}
但我的警报仅在执行 viewDidAppear()
后可见。
我想在开头显示此警报。
我正在使用 Swift 2、Xcode 7 和 iOS 9 SDK。
呈现独立于任何视图控制器的UIAlertController 的方法是创建新的UIWindow 和rootViewController 并将其置于当前UIWindow 之上。这里推荐这种方法。 How to present UIAlertController when not in a view controller?
如果你想看实现。你可以在这里看看。它很简单,但效果很好。我将想法转换为 objective c 并在我的应用程序中使用它。这是 Dylan Bettermann 的 swift 版本:https://github.com/dbettermann/DBAlertController
我尝试了 DBAlertController 方法,但出现了另一个错误,我这样做了:
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
//Notification demand
application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil))
File.changeCurrentDirectoryPath(Path[0])
CreateFile.changeCurrentDirectoryPath(Path[0])
UIApplication.sharedApplication().canOpenURL(NSURL(fileURLWithPath: "fbauth://authorize"))
//deleteAllFile()
window = UIWindow(frame: UIScreen.mainScreen().bounds)
window!.rootViewController = UINavigationController(rootViewController: ViewController2())
window!.makeKeyAndVisible()
return true
}
在 viewController2() 中我这样做了:
@IBOutlet var OptionButton: UIBarButtonItem!
override func viewDidLoad() {
super.viewDidLoad()
ReadAllFile()
let alertController = DBAlertController(title: "DBAlertController", message: "Hello World!", preferredStyle: .Alert)
alertController.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil))
alertController.show(animated: true, completion: nil)
OptionButton.title = "\u{2699}" }
但是我的 OptionButton 是 nil(我链接了它)并且出现了致命错误。
我正在尝试在我的视图加载时显示 UIAlertController
。我知道在 viewDidLoad()
或 viewWillAppear()
期间这是不可能的,因为在执行这些功能期间视图不在层次结构中。但是,如果在 viewDidAppear()
之前添加视图,那么在调用该函数期间应该可以显示我的 UIAlertController
。
因此,我尝试了这个:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
var AlertShow = false
print(Configuration)
if !AlreadyLoad {
if Configuration.count == 0 {
AlertShow = true
print("First lunch")
let Alert = UIAlertController(title: "Premier lancement", message: "C'est la première fois que l'application est lancée. Cette dernière va télécharger tous les articles.\nVeuillez patienter.", preferredStyle: .Alert)
let OkAction = UIAlertAction(title: "Ok", style: .Default) { (action) in }
Alert.addAction(OkAction)
self.presentViewController(Alert, animated: true, completion: {
AlertShow = false
})
}
}
但我的警报仅在执行 viewDidAppear()
后可见。
我想在开头显示此警报。
我正在使用 Swift 2、Xcode 7 和 iOS 9 SDK。
呈现独立于任何视图控制器的UIAlertController 的方法是创建新的UIWindow 和rootViewController 并将其置于当前UIWindow 之上。这里推荐这种方法。 How to present UIAlertController when not in a view controller?
如果你想看实现。你可以在这里看看。它很简单,但效果很好。我将想法转换为 objective c 并在我的应用程序中使用它。这是 Dylan Bettermann 的 swift 版本:https://github.com/dbettermann/DBAlertController
我尝试了 DBAlertController 方法,但出现了另一个错误,我这样做了:
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
//Notification demand
application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil))
File.changeCurrentDirectoryPath(Path[0])
CreateFile.changeCurrentDirectoryPath(Path[0])
UIApplication.sharedApplication().canOpenURL(NSURL(fileURLWithPath: "fbauth://authorize"))
//deleteAllFile()
window = UIWindow(frame: UIScreen.mainScreen().bounds)
window!.rootViewController = UINavigationController(rootViewController: ViewController2())
window!.makeKeyAndVisible()
return true
}
在 viewController2() 中我这样做了:
@IBOutlet var OptionButton: UIBarButtonItem!
override func viewDidLoad() {
super.viewDidLoad()
ReadAllFile()
let alertController = DBAlertController(title: "DBAlertController", message: "Hello World!", preferredStyle: .Alert)
alertController.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil))
alertController.show(animated: true, completion: nil)
OptionButton.title = "\u{2699}" }
但是我的 OptionButton 是 nil(我链接了它)并且出现了致命错误。