Joe*_*ang 11 macos nstableview swift
我的OS X应用程序具有NSTableView更大的行高:
myTableView.rowSizeStyle = .large
Run Code Online (Sandbox Code Playgroud)
我尝试在其中放入一些文字,但我发现我放入的文字不能垂直居中.
请参阅下面的代码.我有三列,前两个使用NSTextField并NSTextView放置一些文本.第三个是复选框按钮.
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
if (tableColumn?.identifier == "Column1") {
let field = NSTextField()
field.stringValue = "someText"
field.isBordered = false
field.isEditable = false
field.backgroundColor = NSColor.red
return field
} else if (tableColumn?.identifier == "Column2") {
let field = NSTextView()
field.string = "someText"
field.backgroundColor = NSColor.green
return field
} else if (tableColumn?.identifier == "Column3") {
let field = NSButton()
field.setButtonType(NSSwitchButton)
field.title = "check me"
return field
}
return nil
}
Run Code Online (Sandbox Code Playgroud)
我的代码几乎基于Apple的文档:"创建和配置NSTextField单元".
结果如下:
如您所见,前两列中的文本不是垂直居中,而复选框是自动垂直居中的.
当func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView?像Apple文档所示使用时,放置文本以使其可以垂直居中的正确方法是什么?
编辑:出于某种原因,我不使用Interface Builder.因此问题坚持以编程方式对UI进行编码.
简单方案:
不要在代码中创建UI元素,在Interface Builder中执行.链接的Apple文档指出:
最可能的情况是,您将在Interface Builder中设计一个单元格,并希望获取它,然后填充该单元格中的值
NSTextView列,删除预定义的表格单元格视图并拖动NSTextView列中的实例.调整视图大小并添加缺少的AutoLayout约束.Align Center X和Align Center Y到NSTextField对象.NSTextField预定义表格单元格视图中的实例,将复选框拖到视图中并添加Align Center Y其他缺少的约束.强烈建议使用Cocoa Bindings将表视图连接到数据源.
除了方法之外,下面的屏幕截图根本不使用任何代码
func numberOfRows(in tableView: NSTableView) -> Int {
return 10
}
Run Code Online (Sandbox Code Playgroud)
或者Column1- NSTextField列 - 在NSTableCellView实例中包装文本字段 并指定一个框架,例如(一个switch语句更快,tableColumn只有nil在表视图也使用了section/group行时):
switch tableColumn!.identifier {
case "Column1":
let cellView = NSTableCellView()
// the value for y: in the frame should be row.height / 2 - textField.height / 2
let field = NSTextField(frame: NSRect(x:0.0, y:10.0, width:tableColumn!.width, height:17.0))
field.stringValue = "someText"
field.isBordered = false
field.isEditable = false
field.backgroundColor = NSColor.red
cellView.addSubview(field)
return cellView
case "Column2":
...
default: return nil
}
Run Code Online (Sandbox Code Playgroud)
注意:
请考虑NSTextView列中的文本只能在文本视图中居中,NSAttributedString或者您必须为封闭的滚动视图指定框架.
PS:在Interface Builder - SCNR中如此容易得多.
| 归档时间: |
|
| 查看次数: |
1025 次 |
| 最近记录: |