【发布时间】:2018-04-23 09:09:02
【问题描述】:
我正在使用 Swift 4.0 和 目前我正在为我的容器视图而苦苦挣扎。
问题是,当我单击其中一个 TableView 项目时,我的容器视图不会加载带有“THEMA 1”标签的 NSView。 (所有 TableView 项都应加载“THEMA 1”视图)
这是我的 ViewController 代码
import Cocoa
class ViewController: NSViewController {
//VARS
var tableViewArray = ["Thema 1", "Thema 2", "Thema 3", "Thema 4", "Thema 5"]
var containerViewArray: [NSView]!
var thema1View = Thema1()
//IBOutlets
@IBOutlet weak var tableView: NSTableView!
@IBOutlet weak var container: NSView!
override func viewDidLoad() {
super.viewDidLoad()
//setup TableView
tableView.delegate = self
tableView.dataSource = self
tableView.action = #selector(onItemClicked)
}
override var representedObject: Any? {
didSet {
// Update the view, if already loaded.
}
}
}
//Extensions
extension ViewController: NSTableViewDelegate, NSTableViewDataSource {
//show what is clicked on tableView
@objc private func onItemClicked() {
if (tableView.clickedRow <= tableViewArray.count - 1) && (tableView.clickedRow >= 0) {
print("\(tableViewArray[tableView.clickedRow]), clicked")
removeAllSubView()
container.addSubview(thema1View, positioned: .above, relativeTo: container)
}
else {
print("There is no content in this cell")
}
}
//removes all SubViews from containerView
func removeAllSubView() {
for view in container.subviews{
view.removeFromSuperview()
}
}
//rows in tableViewArray
func numberOfRows(in tableView: NSTableView) -> Int {
return tableViewArray.count
}
//populate the tableView
func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
return tableViewArray[row]
}
}
Thema1 ViewController 代码
import Cocoa
class Thema1: NSView {
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
// Drawing code here.
}
}
我认为问题隐藏在 onItemClicked() 方法中,但正如我所提到的,我对 macOS 和 Swift 4.0 还很陌生。 因此,我发现了很多关于 iOS 的结果,但只有少数 macOS,但没有任何迹象表明我的情况。
感谢您抽出宝贵的时间并致以诚挚的问候, 丹尼
【问题讨论】:
-
是否要自行替换视图?
-
我想将 Thema1 视图放在容器视图中。未来会有更多的视图,a.e Thema2, Thema3 等等。关于您单击哪个表视图项,相关的 ThemaX 视图应放置在容器视图中。
-
您想使用
Thema1的新实例还是从情节提要加载视图控制器? -
我认为使用新实例会更好。
-
新的
Thema1不包含“THEMA 1”标签。我正在寻找教程或示例。
标签: swift macos view containers nsview