- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 NSSplitViewController
,其中有 2 个 View Controller 作为 splitViewItems
。这工作得很好。
现在我想在 Storyboard中为我的 Splitviewcontroller 设置一个自己的 SplitViewController 类。我给它我自己的类启动应用程序。但现在我只看到一个空窗口。
如果我设置自己的 splitviewcontroller 类,我现在是否可以通过编程方式设置 splitviewcontroller?
如果是,我必须使用哪些代码才能再次在 splitview Controller 中显示两个 View Controller ?
更新
import Cocoa
class SplitViewController: NSSplitViewController {
override func viewDidLoad() {
print("Test")
}
}
最佳答案
这里是 Xcode 9 Playground (Swift 4),展示了如何从代码设置 NSSplitViewController
。
import Cocoa
import PlaygroundSupport
class ViewController: NSViewController {
private let backgroundColor: NSColor
init(backgroundColor: NSColor) {
self.backgroundColor = backgroundColor
super.init(nibName: nil, bundle: nil)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func loadView() {
view = NSView()
view.wantsLayer = true
view.layer?.backgroundColor = backgroundColor.cgColor
}
}
class MainSplitViewController: NSSplitViewController {
private let splitViewResorationIdentifier = "com.company.restorationId:mainSplitViewController"
lazy var vcA = ViewController(backgroundColor: .red)
lazy var vcB = ViewController(backgroundColor: .green)
lazy var vcC = ViewController(backgroundColor: .blue)
override init(nibName nibNameOrNil: NSNib.Name?, bundle nibBundleOrNil: Bundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
setupUI()
setupLayout()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
}
extension MainSplitViewController {
private func setupUI() {
view.wantsLayer = true
splitView.dividerStyle = .paneSplitter
splitView.autosaveName = NSSplitView.AutosaveName(rawValue: splitViewResorationIdentifier)
splitView.identifier = NSUserInterfaceItemIdentifier(rawValue: splitViewResorationIdentifier)
}
private func setupLayout() {
minimumThicknessForInlineSidebars = 180
let itemA = NSSplitViewItem(sidebarWithViewController: vcA)
itemA.minimumThickness = 80
addSplitViewItem(itemA)
let itemB = NSSplitViewItem(contentListWithViewController: vcB)
itemB.minimumThickness = 100
addSplitViewItem(itemB)
let itemC = NSSplitViewItem(viewController: vcC)
itemC.minimumThickness = 80
addSplitViewItem(itemC)
}
}
let vc = MainSplitViewController()
vc.view.frame = CGRect(x: 0, y: 0, width: 400, height: 300)
PlaygroundPage.current.liveView = vc
更新:
与上述版本类似的版本,但针对 macOS 10.10。
import Cocoa
import PlaygroundSupport
class ViewController: NSViewController {
private let backgroundColor: NSColor
init(backgroundColor: NSColor) {
self.backgroundColor = backgroundColor
super.init(nibName: nil, bundle: nil)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func loadView() {
view = NSView()
view.wantsLayer = true
view.layer?.backgroundColor = backgroundColor.cgColor
}
}
class MainSplitViewController: NSSplitViewController {
private let splitViewResorationIdentifier = "com.company.restorationId:mainSplitViewController"
lazy var vcA = ViewController(backgroundColor: .red)
lazy var vcB = ViewController(backgroundColor: .green)
lazy var vcC = ViewController(backgroundColor: .blue)
override init(nibName nibNameOrNil: NSNib.Name?, bundle nibBundleOrNil: Bundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
setupUI()
setupLayout()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
}
extension MainSplitViewController {
private func setupUI() {
view.wantsLayer = true
splitView.dividerStyle = .paneSplitter
splitView.autosaveName = NSSplitView.AutosaveName(rawValue: splitViewResorationIdentifier)
splitView.identifier = NSUserInterfaceItemIdentifier(rawValue: splitViewResorationIdentifier)
vcA.view.widthAnchor.constraint(greaterThanOrEqualToConstant: 80).isActive = true
vcB.view.widthAnchor.constraint(greaterThanOrEqualToConstant: 100).isActive = true
vcC.view.widthAnchor.constraint(greaterThanOrEqualToConstant: 80).isActive = true
}
private func setupLayout() {
let sidebarItem = NSSplitViewItem(viewController: vcA)
sidebarItem.canCollapse = true
sidebarItem.holdingPriority = NSLayoutConstraint.Priority(NSLayoutConstraint.Priority.defaultLow.rawValue + 1)
addSplitViewItem(sidebarItem)
let xibItem = NSSplitViewItem(viewController: vcB)
addSplitViewItem(xibItem)
let codeItem = NSSplitViewItem(viewController: vcC)
addSplitViewItem(codeItem)
}
}
let vc = MainSplitViewController()
vc.view.frame = CGRect(x: 0, y: 0, width: 400, height: 300)
PlaygroundPage.current.liveView = vc
关于macos - NSSplitviewController 以编程方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44309088/
我有一个 NSSplitViewController,其中有 2 个 View Controller 作为 splitViewItems。这工作得很好。 现在我想在 Storyboard中为我的 Sp
我有一个使用 NSSplitViewController 作为根的应用程序,并连接了一个 NSTabViewController 作为其详细 View Controller 。 此应用程序设置为以 1
我创建了一个简单的 NSViewController 并想添加一个只有一个 subview 的 Split View。 Split View应由 NSSplitViewController 控制,因为
我正在尝试使用 Cocoa 创建一个小型 Finder 克隆。我将源列表 TableView (充当侧边栏)和标准 TableView 放置在由 NSSplitViewController 控制的 N
我想在我的 NSSplitViewController 中使用自定义 NSSplitView。 docs说: To provide a custom split view, set this prop
来自 NSSplitViewController 类引用 https://developer.apple.com/library/prerelease/mac/documentation/AppKit
我正在尝试迁移我的 Objective-C,现在将 Swift 知识提高到 Mac OS X 的应用程序。陡峭的学习曲线! 我正在尝试根据在“主视图”上按下的按钮在“详细 View ”中加载具有不同
我有一个 Split View Controller 。除了一件事,我让一切正常: 用户可以拖动中心条来调整底部 View 的大小。 我已经摆弄 Storyboard一段时间了,但没有找到禁用它的方法
我正在尝试在 SwiftUI 中使用 NSSplitViewController 并拥有一个简单的主视图和详细 View ,如下面的代码片段所示。这工作正常,但是在调整窗口大小时,SplitView
XIB 是否支持 NSSplitViewController/NSSplitViewItem?我只看到 NSSplitView 我可以拖放 NSViewController 并将其子类化为 NSSpl
我有一个 NSSplitViewController,其中 first viewcontroller 显示一个表,second viewcontroller 应该根据选择表行。 我正在使用 table
我希望有人能帮我解决这个问题。 无论我做什么,无论是通过 IB 还是在代码中,我都无法使新的 NSSplitViewController 及其项目可折叠或保持其优先级。 尽管此视频另有说明,但无法通过
Xcode 8.2.1、Swift 3.0.2、macOS 10.12 我有一个 NSSplitViewController,它有 3 个 Pane (请注意 NS;这是针对 Mac 应用程序的)。
您好,我在将数据发送到 NSSplitViewController 时遇到问题。看起来不像IOS开发那样工作。 第一个 Controller : class LoginController: NSVi
概述:我的应用程序结构如下所示: NSSplitViewController `- SidebarViewController | `- NSOutlineViewController |
你好,我已经看到这个问题被问过几次了,但还没有明确的答案,所以我为 xcode 7 和 swift2 创建了它(无论如何这可能已经改变了一些东西)。 我使用 Xcode 7 和 Cocoa OSX S
我一直在使用 Storyboard开发一个 macOS 应用程序,该 Storyboard定义了一个带有工具栏和 Split View的主窗口。它是用 Swift 3 编写的——我还没有迁移到 Swi
根据 NSSplitViewControllers 的文档,关联的 NSSplitView 使用 NSSplitViewController 作为其委托(delegate)。特别是在文档中,“ Spl
我正在开发一个 cocoa 应用程序。它包含一个带有一些功能按钮的工具栏。就像里德一样。 我想在调整分割 View 大小的同时调整工具栏部分的大小。有些东西的工作原理如下。如何实现这样的功能? 任何人
我是一名优秀的程序员,十分优秀!