swift – NSPopover内部的NSTableview看起来与众不同

swift – NSPopover内部的NSTableview看起来与众不同,第1张

概述我创建了一个类ListView,这是一个非常简单的Tableview. 如果我用IB实例化它看起来很好. 如果我以编程方式实例化它,也是一样的. 如果我在NSPopover中以编程方式实例化它,我的表格的每一行都会得到浅灰色背景. 这是从哪里来的? 这里的代码: class ViewController: NSViewController { let popover = NSPopover 我创建了一个类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    }}
解决方法 我最近遇到了这个问题,找不到令人满意的解决方案.

我现在设法做的方法是将NStableVIEw包装在NSEffectVIEw中并将状态设置为非活动状态,如下所示查看:https://christiantietze.de/posts/2017/06/nssplitviewcontroller-visual-effects/(我已在IB中完成此 *** 作)

它对正常/浅绿色外观确实有效.遗憾的是,在黑暗的外观中,tableVIEw部分标题由于某种原因是透明的.我很想知道它在系统范围内的暗模式下会如何看待Mojave.

总结

以上是内存溢出为你收集整理的swift – NSPopover内部的NSTableview看起来与众不同全部内容,希望文章能够帮你解决swift – NSPopover内部的NSTableview看起来与众不同所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1072265.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存