如何使用NSPageController在NSViewControllers之间切换?

时间:2015-02-24 16:25:51

标签: macos swift nsviewcontroller

我运气不好,发现网上的任何一些与我想做的事情非常接近的例子。我正在尝试使用NSPageController查看并在多个NSPageControllers之间切换。我的步骤。

  1. 我创建了一个新的OS X swift项目
  2. 我向ViewController添加了一个对象,并将其设为NSPageController类。
  3. 我添加了两个按钮,一个是我标签,另一个是"下一个"另一个我标签"返回"对于过渡。
  4. 我将按钮链接到NSPageController对象作为navigateForward和navigateBack操作。
  5. 我在NSViewController对象的自定义NSPageController类中创建了一个插座,并添加了特定的NSPageController委托方法。
  6. 我在storyboard中添加了两个额外的视图控制器,并为它们创建了一个标识符,以便在我的自定义视图控制器类中引用:Wizard1,Wizard2。

    导入Cocoa

    类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)
    
    }
    

    }

  7. 按下“下一步”按钮时出现的错误是:

    -[NSNib initWithNibNamed:bundle:] could not load the nibName: NSPageController in bundle (null).
    

2 个答案:

答案 0 :(得分:0)

也许您正在尝试在AppDelegate.m或正在初始化页面控制器的任何位置加载名称错误的笔尖。

否则您错过了创建.xib文件并将其命名为NSPageController。在创建Cocoa Touch类时,如果需要,还有一个复选框也可以为您的类创建一个xib文件。

答案 1 :(得分:0)

此行负责错误:

myPageController = NSPageController()

您尝试在没有笔尖的情况下初始化视图控制器,这就是为什么它不起作用。默认情况下,NSViewController的名称用于标识与其对应的nib。在你的情况下,它是" NSPageController"。