我正在尝试自学OSX应用程序开发,以便我可以弥补自己的所有坏习惯8)。
可能无关的信息
我有一个成功运行的试用版应用程序 - 它根据用户通过滑块的输入调整自身大小。
执行此操作的关键代码是在一个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的新实例?
感谢接受有关方法的任何意见/反馈
答案 0 :(得分:0)
我在发布问题后几分钟找到答案时讨厌...
根据信息我发现here ...
func makeChild() -> SmallViewController {
let mySmallGroup = NSStoryboard(name: "Main", bundle: nil).instantiateControllerWithIdentifier("smallVwCtl") as! SmallViewController
self.addSplitViewItem(NSSplitViewItem(viewController: mySmallGroup))
return mySmallGroup
}
...但我仍然希望听到有关方法论的任何反馈。感谢。