0
매우 간단한 Tableview 인 ListView 클래스를 만들었습니다.NSPopover 내의 NSTableview가 독립형으로 보입니다.
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
}
}
나를 위해 절대적으로 설명 할 수 없습니다. 그 이슈에서 다시 작업하면 효과 (회색 배경 또는 행)가 사라집니다. 나는 그 스크린 샷을 만들었습니다. 그렇지 않으면 나는 미쳤다고 생각할 것입니다 ;-). – mica