OSXアプリケーション開発を自習するため、自分の悪い習慣をすべて補うことができます8)。NSSplitViewItemとして書き直すもの
おそらく無関係な情報
私は正常に動作します試用アプリを持っている - それは、スライダを介してユーザからの入力に基づいて自身のサイズを変更します。
これは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の新しいインスタンスを正常に接続するにはどうしたらいいですか?
そして感謝し、私は情報に基づいて...
を質問を投稿した後、私の答えの分を見つけたとき、私はそれを嫌うの方法論