我创建了一个类ListView,这是一个非常简单的Tableview。
如果我用IB实例化它,一切看起来都很好。 如果我以编程方式实例化它也是一样。
如果我在NSPopover
内以编程方式对其进行实例化,那么我的每一行都会得到浅灰色背景。
这是从哪里来的?
这里是代码:
class ViewController: NSViewController {
let popover = NSPopover()
@IBOutlet weak var label: NSTextField!
@IBAction func bu1(_ sender: Any) {
popover.show(relativeTo: label.visibleRect, of: label, preferredEdge: NSRectEdge.maxY)
}
override func viewDidLoad() {
super.viewDidLoad()
let scrollListView = NSScrollView()
let listView = ListView(frame: NSRect(x:100, y: 100, width: 100, height: 100))
scrollListView.documentView = listView
let viewController = NSViewController()
viewController.view = scrollListView
popover.appearance = NSAppearance(named: NSAppearance.Name.vibrantLight)
popover.animates = false
popover.contentViewController = viewController
}
}
class ListView: NSTableView, NSTableViewDataSource, NSTableViewDelegate {
private var list = ["Tom","Jack","Susi"]
required init?(coder: NSCoder) {
super.init(coder: coder)
setup()
}
override init(frame frameRect: NSRect) {
super.init(frame: frameRect)
setup()
}
private func setup() {
selectionHighlightStyle = NSTableView.SelectionHighlightStyle.regular
rowSizeStyle = NSTableView.RowSizeStyle.small
intercellSpacing = NSMakeSize(10.0, 0.0)
headerView = nil
target = self
backgroundColor = NSColor.white
for column in tableColumns {
removeTableColumn(column)
}
let column1 = NSTableColumn(identifier: NSUserInterfaceItemIdentifier(rawValue: "text"))
column1.isEditable = false
column1.width = 200
addTableColumn(column1)
delegate = self
dataSource = self
self.reloadData()
}
func numberOfRows(in tableView: NSTableView) -> Int {
return list.count
}
func tableView(_ tableView: NSTableView, rowViewForRow row: Int) -> NSTableRowView? {
return NSTableRowView()
}
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
var cellView = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "MyView"), owner: self) as? NSTableCellView
if cellView == nil {
cellView = NSTableCellView(frame: NSZeroRect)
let textField = NSTextField(frame: NSZeroRect)
textField.isBezeled = false
textField.drawsBackground = false
textField.isEditable = false
textField.isSelectable = false
cellView!.addSubview(textField)
cellView!.textField = textField
cellView!.identifier = NSUserInterfaceItemIdentifier(rawValue: "MyView")
}
cellView!.textField!.stringValue = list[row]
return cellView
}
}
答案 0 :(得分:1)
我最近遇到了这个问题,找不到令人满意的解决方案。
我现在设法做到的是将NSTableView
包裹在NSEffectView
内,并将状态设置为非活动,此处指出:{{3} }(我已经在IB中做到了这一点)
对于正常/浅绿色外观确实不错。可悲的是,出于某种原因,在黑暗外观中,TableView节标题是透明的。我很好奇它在系统范围内的黑暗模式下在Mojave上的外观。
答案 1 :(得分:0)
我有同样的问题。事实上,这个问题出现在我放在NSPopover中的所有项目中。
将外观设置为浅绿色popover.appearance = NSAppearance(named: NSAppearance.Name.aqua)
,可以解决问题。
但是现在,当您在明暗模式之间切换时,弹出窗口不会更新......