I am trying to get a sheet to load when the main window first loads. This sheet is so that it asks the user for a file so that they are sort of forced to open a file for use in the program when they first start.
I tried to put performSegue(withIdentifier: sender:) in viewDidLoad(), however it just loads the sheet and nothing else.
override func viewDidLoad() {
super.viewDidLoad()
performSegue(withIdentifier: NSStoryboardSegue.Identifier(rawValue: "browse"), sender: self)
}
I want the main window to load, then the sheet to slide down immediately after asking the user to open a file.
Where should I put the performSegue or is there another way I should be doing this?
@mschmidt is right, I believe; you'll need to perform the segue from
viewDidAppear()orwindowDidBecomeMain()or similar; the view needs to have been displayed before you can segue from it.Note that
viewDidAppear()will fire when the view is drawn, whether or not it has focus;windowDidBecomeMain()will only fire when your app becomes the frontmost app; you may be working in another app but still be able to see your app's windows on-screen, and in this statewindowDidBecomeMain()may not have fired yet.And yes, both
viewDidAppear()andwindowDidBecomeMain()will fire every time the view appears or the window becomes main, meaning if you minimise the app then un-minimise it, both will fire again. So you'll need some way of ensuring your segue doesn't show again each time, unless you want it to. A simple boolean flag egsegueHasShownshould achieve that.