如果我用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 }}解决方法 我最近遇到了这个问题,找不到令人满意的解决方案.
我现在设法做的方法是将NStableVIEw包装在NSEffectVIEw中并将状态设置为非活动状态,如下所示查看:https://christiantietze.de/posts/2017/06/nssplitviewcontroller-visual-effects/(我已在IB中完成此 *** 作)
它对正常/浅绿色外观确实有效.遗憾的是,在黑暗的外观中,tableVIEw部分标题由于某种原因是透明的.我很想知道它在系统范围内的暗模式下会如何看待Mojave.
总结以上是内存溢出为你收集整理的swift – NSPopover内部的NSTableview看起来与众不同全部内容,希望文章能够帮你解决swift – NSPopover内部的NSTableview看起来与众不同所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)