2017-11-26 21 views
0

매우 간단한 Tableview 인 ListView 클래스를 만들었습니다.NSPopover 내의 NSTableview가 독립형으로 보입니다.

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 
    } 
} 
+0

나를 위해 절대적으로 설명 할 수 없습니다. 그 이슈에서 다시 작업하면 효과 (회색 배경 또는 행)가 사라집니다. 나는 그 스크린 샷을 만들었습니다. 그렇지 않으면 나는 미쳤다고 생각할 것입니다 ;-). – mica

답변

0

저도 같은 문제가 있습니다. 이 문제는 실제로 NSPopover 내부에있는 모든 항목에 나타납니다. 외관을 아쿠아로 설정하면 popover.appearance = NSAppearance(named: NSAppearance.Name.aqua)으로 문제가 해결됩니다. 하지만 밝음과 어두움 모드 사이를 전환하면 팝업 창이 업데이트되지 않습니다 ...