我正在尝试开发OSX应用程序。 Xcode和Swift对我来说都是新手。
当用户更改窗口大小时,默认值都非常擅长修改对象,但是当视图中的对象发生更改时,更改窗口大小则不太好。
我已经看过几个重新计算原点和帧大小的例子 - 我认为它的数学部分是直截了当的。但是,我无法获得NSWindow对象的工作参考。 click-drag不会在任何.swift文件(AppDelegate,ViewController,custom)中为窗口存放IBOutlet。输入它并不会绑定它。
我想要完成的一个简化示例: 根据用户输入,更改显示内容,并调整窗口大小以包含新修改的显示。 在我的主要故事板上 - 窗口控制器,被激活 - 视图控制器,包含水平滑块和容器视图。容器视图被伪装成 - 水平拆分视图控制器,被绑定到 - 视图控制器的三个重复实例。
当用户更改滑块时,三个最底层视图控制器中的一个或多个将被隐藏/取消隐藏。
附图显示了我正在寻找的行为。
想象一下文字"小组"是的,有一系列下拉框,文本框,单选按钮等。
答案 0 :(得分:0)
我在这里回答我自己的问题 - 仍然无法将IBOutlet与NSWindow绑定。任何有更好解决方案的人,请告诉我。
下面是我的Main.storyboard的捕获。所有编码都在与第一个视图控制器关联的类junkViewController2中完成。
这是junkViewController2的代码。我知道,它可以更简洁......
//
// JunkViewController2.swift
// Scratch1
//
import Cocoa
class JunkViewController2: NSViewController {
var junkSplitViewController: JunkSplitViewController!
var myWindow: NSWindow!
var dy: CGFloat!
@IBOutlet weak var mySlider: NSSlider!
override func viewDidLoad() {
super.viewDidLoad()
// Do view setup here.
dy = 0.0
}
@IBAction func mySlider(sender: NSSlider) {
let junkSplitViewController = self.childViewControllers[0]
dy = 0.0
for controller in junkSplitViewController.childViewControllers {
if controller.title == "smallGroup1" {
if mySlider.intValue > 0 {
if controller.view.hidden {
dy = dy + 30.0
}
controller.view.hidden = false
} else {
if !controller.view.hidden {
dy = dy - 30.0
}
controller.view.hidden = true
}
}
if controller.title == "smallGroup2" {
if mySlider.intValue > 1 {
if controller.view.hidden {
dy = dy + 30.0
}
controller.view.hidden = false
} else {
if !controller.view.hidden {
dy = dy - 30.0
}
controller.view.hidden = true
}
}
if controller.title == "smallGroup3" {
if mySlider.intValue > 2 {
if controller.view.hidden {
dy = dy + 30.0
}
controller.view.hidden = false
} else {
if !controller.view.hidden {
dy = dy - 30.0
}
controller.view.hidden = true
}
}
}
resize()
}
func resize() {
var windowFrame = NSApp.mainWindow!.frame
let oldWidth = windowFrame.size.width
let oldHeight = windowFrame.size.height
let old_x = windowFrame.origin.x
let old_y = windowFrame.origin.y
let toAdd = CGFloat(dy)
let newHeight = oldHeight + toAdd
let new_y = old_y - toAdd
windowFrame.size = NSMakeSize(oldWidth, newHeight)
windowFrame.origin = NSMakePoint(old_x, new_y)
NSApp.mainWindow!.setFrame(windowFrame, display: true)
}
}