里面NSPopover NSTableView的外观作为独立的不同

问题描述 投票:5回答:2

我创建了一个类的ListView,这是一个非常简单的泰伯维。

如果我和IB初始化它一切正常。同样的,如果我实例化编程方式。

如果我编程实例化该NSPopover里,我得到了我的表的每一行浅灰色的背景。

enter image description here

哪里该从何而来?

这里的代码:

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
    }
}
swift macos cocoa nstableview nspopover
2个回答
1
投票

最近,我遇到了这个问题,但没有找到一个令人满意的解决方案。

路上我设法做到这一点,现在包裹了一个NSTableViewNSEffectView并设置状态这里指出的为无效,视图:https://christiantietze.de/posts/2017/06/nssplitviewcontroller-visual-effects/(我在IB做到了这一点)

它做工精细的正常/ AQUA的外观。可悲的是在黑暗外观的TableView节头是透明的某些原因。我很好奇,看看它是如何会看在莫哈韦与全系统的暗模式。


0
投票

我也有同样的问题。这个问题似乎是,其实在我把一个NSPopover内的所有物品。外观设置为浅绿色,popover.appearance = NSAppearance(named: NSAppearance.Name.aqua),解决问题一点。但是现在,当你光明与黑暗的模式之间改变不更新酥料饼...

© www.soinside.com 2019 - 2024. All rights reserved.