gpt4 book ai didi

xcode - 根据更改 View 的用户输入更改 OSX 应用程序窗口大小

转载 作者:行者123 更新时间:2023-11-28 08:41:56 25 4
gpt4 key购买 nike

我正在尝试开发 OSX 应用程序。 Xcode 和 Swift 对我来说都是新的。

默认值都非常擅长在用户更改窗口大小时修改对象,但不太擅长在 View 中的对象发生变化时更改窗口大小。

我看过几个重新计算原点和帧大小的示例 - 我认为其中的数学部分很简单。但是,我无法获得对 NSWindow 对象的有效引用。单击拖动不会在任何 .swift 文件(AppDelegate、ViewController、自定义)中为窗口存放 IBOutlet。并且输入它不会绑定(bind)它。

我试图完成的一个简化示例:根据用户输入,更改显示内容,并调整窗口大小以包含新修改的显示。在我的主 Storyboard上- 窗口 Controller ,转至- View Controller ,包含一个水平 slider 和一个容器 View 。容器 View 被转到- 水平 Split View Controller ,转至- View Controller 的三个重复实例。

当用户更改 slider 时,最底部的三个 View Controller 中的一个或多个将被隐藏/取消隐藏。

所附图片显示了我正在寻找的行为。

想象一下“小组”这个文字所在的地方,有一个下拉框、文本框、单选按钮等的集合。

Slider bar at three, see three groups

Slider bar at two, see two groups

Slider bar at one, see one group

最佳答案

我在这里回答我自己的问题 - 仍然无法将 IBOutlet 与 NSWindow 绑定(bind)。谁有更好的解决方案,请告诉我。

下面是我的 Main.storyboard 的截图。所有编码都在与第一个 View Controller 关联的类 junkViewController2 中完成。

enter image description here

这里是 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)
}

}

关于xcode - 根据更改 View 的用户输入更改 OSX 应用程序窗口大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36300284/

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