I have had bad luck finding any examples on the web that closely match what I am trying to do. I am trying to using NSPageController
to view and switch between multiple NSPageControllers
. My steps.
- I create a new OS X swift project
- I add an object to the
ViewController
and make it ofNSPageController
class. - I add two buttons, one I label "Next" and the other one I label "Back" for the transitions.
- I link the buttons to the
NSPageController
object as navigateForward and navigateBack actions. - I create an outlet in the custom
NSViewController
class for theNSPageController
object and add the specificNSPageController
delegate methods. I add two additional view controllers in storyboard and create an identifier for them to reference back in my custom view controller class: Wizard1, Wizard2.
import Cocoa
class ViewController: NSViewController, NSPageControllerDelegate {
@IBOutlet var myPageController: NSPageController! override func viewDidLoad() { super.viewDidLoad() let vc1: AnyObject? = self.storyboard!.instantiateControllerWithIdentifier("Wizard1") let vc2: AnyObject? = self.storyboard!.instantiateControllerWithIdentifier("Wizard2") self.myPageController.arrangedObjects.append(vc1!) self.myPageController.arrangedObjects.append(vc2!) // Do any additional setup after loading the view. } override init?(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) { myPageController = NSPageController() super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil?) } required init?(coder aDecoder: NSCoder) { myPageController = NSPageController() super.init(coder:aDecoder) } override var representedObject: AnyObject? { didSet { // Update the view, if already loaded. } } func pageController(pageController: NSPageController, identifierForObject object: AnyObject!) -> String! { return "View" } func pageController(pageController: NSPageController, viewControllerForIdentifier identifier: String!) -> NSViewController! { let vc1: AnyObject? = self.storyboard!.instantiateControllerWithIdentifier("Wizard1") return vc1 as NSViewController } func pageController(pageController: NSPageController, prepareViewController viewController: NSViewController!, withObject object: AnyObject!) { viewController.representedObject = object } func pageControllerDidEndLiveTransition(pageController: NSPageController) { pageController.completeTransition() } func pageControllerWillStartLiveTransition(pageController: NSPageController) { self.presentViewControllerAsModalWindow(self.storyboard?.instantiateControllerWithIdentifier("Wizard2") as NSViewController) }
}
The error I get when pressing the Next button is:
-[NSNib initWithNibNamed:bundle:] could not load the nibName: NSPageController in bundle (null).