什么要重铸为NSSplitViewItem

时间:2016-05-06 03:22:15

标签: swift cocoa

我正在尝试自学OSX应用程序开发,以便我可以弥补自己的所有坏习惯8)。

可能无关的信息

我有一个成功运行的试用版应用程序 - 它根据用户通过滑块的输入调整自身大小。

enter image description here enter image description here enter image description here

执行此操作的关键代码是在一个View控制器中......

class JunkViewController2: NSViewController {

    var myY: CGFloat!

    @IBOutlet weak var mySlider: NSSlider!
    @IBOutlet weak var myView: NSView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do view setup here.
        self.preferredContentSize = NSMakeSize(self.view.frame.width, 83)
    }

    @IBAction func mySlider(sender: NSSlider) {

        let mySplitViewController = self.childViewControllers[0] as! JunkSplitViewController

        switch mySlider.intValue {
        case 3:
            myY = 140.0
            mySplitViewController.splitViewItems[2].collapsed = false
            mySplitViewController.splitViewItems[1].collapsed = false
            mySplitViewController.showSubview(2)
            mySplitViewController.showSubview(1)
            mySplitViewController.showSubview(0)
        case 2:
            myY = 110.0
            mySplitViewController.splitViewItems[2].collapsed = true
            mySplitViewController.splitViewItems[1].collapsed = false
            mySplitViewController.hideSubview(2)
            mySplitViewController.showSubview(1)
            mySplitViewController.showSubview(0)
        default:
            myY = 80.0
            mySplitViewController.splitViewItems[2].collapsed = true
            mySplitViewController.splitViewItems[1].collapsed = true
            mySplitViewController.hideSubview(2)
            mySplitViewController.hideSubview(1)
            mySplitViewController.showSubview(0)
        }

        mySplitViewController.preferredContentSize = NSMakeSize(self.view.frame.width, myY - 50 + 3)
        self.preferredContentSize = NSMakeSize(self.view.frame.width, myY + 3)

    }

}

更相关的信息

在上面的工作中,在故事板上我有三个连接到SplitView控制器的重复ViewControllers。我做了一堆感觉像腰带和吊带的工作,以确保一切都得到适当调整 - 但关键部分(我认为)是.collapsed属性。

我现在正在尝试使用完全不同的方法完成同样的事情 - 动态添加/删除拆分视图项。这应该允许我在我的故事板上只有一个小的ViewControllers,然后根据需要实例化它。

遵循这个想法,这是我的SplitViewController ......

class JunkSplitViewController: NSSplitViewController {
    @IBOutlet weak var mySplitView: NSSplitView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do view setup here.
        //mySplitView.adjustSubviews()
    }

    func makeChild() -> SmallViewController {
        let mySmallGroup = NSStoryboard(name: "Main", bundle: nil).instantiateControllerWithIdentifier("smallVwCtl")
        self.addSplitViewItem(mySmallGroup as! NSSplitViewItem)
        return mySmallGroup as! SmallViewController
    }

}

主视图控制器调用makeChild函数。

class JunkViewController: NSViewController {

    @IBOutlet weak var mySlider: NSSlider!
    @IBOutlet weak var myView: NSView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do view setup here.
        self.preferredContentSize = NSMakeSize(self.view.frame.width, 83)
    }

    @IBAction func mySlider(sender: NSSlider) {

        let mySplitViewController = self.childViewControllers[0] as! JunkSplitViewController

        while mySlider.intValue.toIntMax() > mySplitViewController.splitViewItems.count.toIntMax() {
            mySplitViewController.makeChild()
        }

        while mySlider.intValue.toIntMax() < mySplitViewController.splitViewItems.count.toIntMax(){
            mySplitViewController.splitViewItems.removeLast()
        }

    }

}

我在JunkSplitViewController的self.addSplitViewItem(mySmallGroup as! NSSplitViewItem)行收到错误...&#34;无法将Scratch2.SmallViewController类型的值转换为NSSplitViewItem&#34;

我尝试了一些组合(强制mySmallGroup,&#39; self.addSplitViewItem(mySmallGroup as!SmallViewController)`等等)在编译或运行时,所有内容都会导致类似的错误。< / p>

我在SplitViewItem上找不到任何文档。

那么问题 - 什么将作为addSplitViewItem的输入,并仍然成功连接SmallViewController的新实例?

感谢接受有关方法的任何意见/反馈

1 个答案:

答案 0 :(得分:0)

我在发布问题后几分钟找到答案时讨厌...

根据信息我发现here ...

func makeChild() -> SmallViewController {
    let mySmallGroup = NSStoryboard(name: "Main", bundle: nil).instantiateControllerWithIdentifier("smallVwCtl") as! SmallViewController
    self.addSplitViewItem(NSSplitViewItem(viewController: mySmallGroup))
    return mySmallGroup
}

...但我仍然希望听到有关方法论的任何反馈。感谢。