Swift 中带有拆分视图的源列表边栏实现
Source List Sidebar implementation in Swift with split view
我在尝试为应用程序实现侧边栏导航时遇到问题。考虑到源列表在 OS X 应用程序中如此突出,并且 Apple 的人机界面指南将源列表称为在应用程序内导航的理想方式,我很惊讶没有更多可用资源(好吧反正我也找不到)。我能找到的与拆分视图相关的所有内容似乎都指的是 ios。
我对实现源列表的内容没有任何问题,当涉及到基于源列表中的 selection 的视图交换时,我的问题就出现了。
本质上,我希望用户 select 在拆分视图的主要侧的源列表中选择一个选项,然后在拆分视图的详细侧加载相应的视图。我不确定是否有一种简单的方法可以使用故事板来实现类似的东西,例如 tabview 控制器?如果没有,是否有人能够在 swift 中建议一个基本的实现来帮助我入门?我不确定从视图交换方面从哪里开始。
提前致谢。
编辑:
根据我之前的 post,我在下面包含了视图交换的基本实现,但是当视图被替换时,之前的视图仍然存在。除了我的问题之外,如何在添加新视图之前删除以前的视图?我的代码行 removeFromSuperView() 似乎导致了重大问题!
import Cocoa
class AppController: NSObject {
@IBOutlet weak var ourView: NSView!
var ourViewController: NSViewController!
let kFirstViewTag = 0
let kSecondViewTag = 1
let kFirstView = "FirstViewController"
let kSecondView = "SecondViewController"
@IBAction func changeView(sender: NSPopUpButton) {
let tag = sender.selectedTag()
self.changeViewController(tag)
}
func changeViewController(tag: Int){
ourViewController.view.removeFromSuperview()
switch tag{
case kFirstViewTag:
self.ourViewController = FirstViewController(nibName: kFirstView, bundle: nil)
case kSecondViewTag:
self.ourViewController = SecondViewController(nibName: kSecondView, bundle: nil)
default: print("There was an error with the view controller change")
}
ourView.addSubview(ourViewController.view)
}
override func awakeFromNib() {
self.changeViewController(kFirstViewTag)
}
}
任何对解决我遇到的视图问题的解决方案感兴趣的人,我只是替换了视图,使用以下代码从 superview 中删除:self.ourViewController?.view.removeFromSuperview()
我遇到的问题是由于视图控制器是可选值。我的疏忽。
然后可以通过使用源列表的选择更改 属性 触发视图更改来调整边栏源列表。
如果有人感兴趣,我会在完成后post提供完整的解决方案。
我在尝试为应用程序实现侧边栏导航时遇到问题。考虑到源列表在 OS X 应用程序中如此突出,并且 Apple 的人机界面指南将源列表称为在应用程序内导航的理想方式,我很惊讶没有更多可用资源(好吧反正我也找不到)。我能找到的与拆分视图相关的所有内容似乎都指的是 ios。
我对实现源列表的内容没有任何问题,当涉及到基于源列表中的 selection 的视图交换时,我的问题就出现了。
本质上,我希望用户 select 在拆分视图的主要侧的源列表中选择一个选项,然后在拆分视图的详细侧加载相应的视图。我不确定是否有一种简单的方法可以使用故事板来实现类似的东西,例如 tabview 控制器?如果没有,是否有人能够在 swift 中建议一个基本的实现来帮助我入门?我不确定从视图交换方面从哪里开始。
提前致谢。
编辑:
根据我之前的 post,我在下面包含了视图交换的基本实现,但是当视图被替换时,之前的视图仍然存在。除了我的问题之外,如何在添加新视图之前删除以前的视图?我的代码行 removeFromSuperView() 似乎导致了重大问题!
import Cocoa
class AppController: NSObject {
@IBOutlet weak var ourView: NSView!
var ourViewController: NSViewController!
let kFirstViewTag = 0
let kSecondViewTag = 1
let kFirstView = "FirstViewController"
let kSecondView = "SecondViewController"
@IBAction func changeView(sender: NSPopUpButton) {
let tag = sender.selectedTag()
self.changeViewController(tag)
}
func changeViewController(tag: Int){
ourViewController.view.removeFromSuperview()
switch tag{
case kFirstViewTag:
self.ourViewController = FirstViewController(nibName: kFirstView, bundle: nil)
case kSecondViewTag:
self.ourViewController = SecondViewController(nibName: kSecondView, bundle: nil)
default: print("There was an error with the view controller change")
}
ourView.addSubview(ourViewController.view)
}
override func awakeFromNib() {
self.changeViewController(kFirstViewTag)
}
}
任何对解决我遇到的视图问题的解决方案感兴趣的人,我只是替换了视图,使用以下代码从 superview 中删除:self.ourViewController?.view.removeFromSuperview()
我遇到的问题是由于视图控制器是可选值。我的疏忽。
然后可以通过使用源列表的选择更改 属性 触发视图更改来调整边栏源列表。
如果有人感兴趣,我会在完成后post提供完整的解决方案。