gpt4 book ai didi

swift - 重铸为 NSSplitViewItem 的内容

转载 作者:行者123 更新时间:2023-11-30 13:26:59 24 4
gpt4 key购买 nike

我正在尝试自学 OSX 应用程序开发,这样我就可以改掉自己所有的坏习惯 8)。

<小时/>

可能是无关信息

我有一个可以成功运行的试用应用程序 - 它根据用户通过 slider 输入的内容调整自身大小。

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

执行此操作的关键代码位于一个 View Controller 中......

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)

}

}
<小时/>

更多相关信息

在上面的 Storyboard上,我有三个重复的 ViewController 连接到 SplitView Controller 。我做了很多类似腰带和吊带的工作,以确保所有东西都能正确调整大小 - 但关键部分(我认为)是 .collapsed 属性。

我现在正在尝试使用完全不同的方法来完成同样的事情 - 动态添加/删除 Split View项目。这应该允许我的 Storyboard上只有一个小的 ViewController,然后根据需要实例化它。

按照这个想法,这是我的 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
}

}

主视图 Controller 调用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) 行处收到错误...“无法将 Scratch2.SmallViewController 类型的值转换为 NSSplitViewItem”

我尝试了一些组合(强制 mySmallGroup、'self.addSplitViewItem(mySmallGroup as!SmallViewController)` 等),无论是在编译还是运行时,一切都会导致类似的错误。

我找不到任何有关 SplitViewItem 的文档。

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

并感激地接受有关该方法的任何评论/反馈

最佳答案

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

根据我找到的信息here ...

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

...但我仍然想听到有关方法的任何反馈。谢谢。

关于swift - 重铸为 NSSplitViewItem 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37063681/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com