2016-05-06 33 views
0

OSXアプリケーション開発を自習するため、自分の悪い習慣をすべて補うことができます8)。NSSplitViewItemとして書き直すもの


おそらく無関係な情報

私は正常に動作します試用アプリを持っている - それは、スライダを介してユーザからの入力に基づいて自身のサイズを変更します。

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

これは1つのビューコントローラであるんコードの重要な部分...

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) 

    } 

} 

より適切な情報

何で働いている、abov私はSplitViewコントローラに接続された3つの複製ViewControllerを持っています。ベルトやサスペンダーのような感じで、すべてのサイズが適切に変更されていることを確認しています。しかし、重要な部分は.collapsedです。

私は今、完全に異なる方法を使用して同じことを達成しようとしています - 分割表示項目を動的に追加/削除すること。これにより、私のストーリーボード上に小さなViewControllerの1つしか持たず、必要に応じてインスタンス化することができます。

そのアイデアに続いて、ここでの主なビューコントローラがmakeChild関数を呼び出します

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 
    } 

} 

...私SplitViewControllerです。

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)行でエラーが発生しますが...「NSSplitViewItemにタイプScratch2.SmallViewControllerの値をキャストできませんでした」

I 'はmySmallGroupを強制的に(組み合わせの一握りを試してみましたself.addSplitViewItem(!SmallViewControllerとしてのmySmallGroup) `など)コンパイル時と実行時のすべてで同様のエラーが発生します。

SplitViewItemに関するドキュメントが見つかりません。

質問 - addSplitViewItemの入力として機能し、SmallViewControllerの新しいインスタンスを正常に接続するにはどうしたらいいですか?

そして感​​謝し、私は情報に基づいて...

を質問を投稿した後、私の答えの分を見つけたとき、私はそれを嫌うの方法論

答えて

0

上の任意のコメント/フィードバックを受け入れ、私はhere ...

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

...でも、まだ方法論に関するフィードバックをお寄せください。ありがとう。

関連する問題