仅当viewDidAppear完成调用时,UIAlertController才可见

时间:2015-08-19 09:58:21

标签: ios swift uialertcontroller

我正在尝试显示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。

2 个答案:

答案 0 :(得分:0)

呈现独立于任何视图控制器的UIAlertController的方法是创建新的UIWindow和rootViewController并置于当前的UIWindow之上。这里推荐使用此方法。 How to present UIAlertController when not in a view controller?

如果你想看到实现。你可以看看这里。它很简单,但效果很好。我将这个想法转换为目标c并在我的应用程序中使用它。以下是Dylan Bettermann的快速版本:https://github.com/dbettermann/DBAlertController

答案 1 :(得分:0)

我尝试了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(我链接了它),我得到了致命错误。