Dev*_*Dev 42 cocoa objective-c nstableview osx-lion
OS X应用程序中的标准突出显示颜色为蓝色.
是否可以将其更改为其他颜色,例如灰色?
请注意,我NSTableView从OS X 10.7开始使用新的基于视图的可用.
Jam*_*hen 74
由于您使用的是基于视图的NSTableView,因此可以将NSTableRowView子类化,将其提供给表委托方法- (NSTableRowView *)tableView:(NSTableView *)tableView rowViewForRow:(NSInteger)row;,然后在行视图类中自定义您的选择.
这是一个例子:
- (void)drawSelectionInRect:(NSRect)dirtyRect {
if (self.selectionHighlightStyle != NSTableViewSelectionHighlightStyleNone) {
NSRect selectionRect = NSInsetRect(self.bounds, 2.5, 2.5);
[[NSColor colorWithCalibratedWhite:.65 alpha:1.0] setStroke];
[[NSColor colorWithCalibratedWhite:.82 alpha:1.0] setFill];
NSBezierPath *selectionPath = [NSBezierPath bezierPathWithRoundedRect:selectionRect xRadius:6 yRadius:6];
[selectionPath fill];
[selectionPath stroke];
}
}
Run Code Online (Sandbox Code Playgroud)
Fel*_*lix 16
这是James Chen在Swift 3中的解决方案.我还添加了委托方法.
class MyNSTableRowView: NSTableRowView {
override func drawSelection(in dirtyRect: NSRect) {
if self.selectionHighlightStyle != .none {
let selectionRect = NSInsetRect(self.bounds, 2.5, 2.5)
NSColor(calibratedWhite: 0.65, alpha: 1).setStroke()
NSColor(calibratedWhite: 0.82, alpha: 1).setFill()
let selectionPath = NSBezierPath.init(roundedRect: selectionRect, xRadius: 6, yRadius: 6)
selectionPath.fill()
selectionPath.stroke()
}
}
}
Run Code Online (Sandbox Code Playgroud)
NSTableViewDelegate:
func tableView(_ tableView: NSTableView, rowViewForRow row: Int) -> NSTableRowView? {
return MyNSTableRowView()
}
Run Code Online (Sandbox Code Playgroud)
小智 12
使用以下代码响应NSTableViewDelegate协议tableViewSelectionDidChange:
获取NSTableRowView所选行并setEmphasized在其上调用方法.当setEmphasized设置为YES时,您将获得蓝色突出显示,否则您将获得灰色突出显示.
-(void)tableViewSelectionDidChange:(NSNotification *)aNotification {
NSInteger selectedRow = [myTableView selectedRow];
NSTableRowView *myRowView = [myTableView rowViewAtRow:selectedRow makeIfNecessary:NO];
[myRowView setEmphasized:NO];
}
Run Code Online (Sandbox Code Playgroud)
小智 6
对Jean-Pierre的一些修改回答
使用以下代码响应NSTableViewDelegate协议tableViewSelectionDidChange:
获取所选行的NSTableRowView并在其上调用setEmphasized方法.当setEmphasized设置为YES时,您将获得蓝色突出显示,而如果没有,则获得灰色突出显示.
-(void)tableViewSelectionDidChange:(NSNotification *)aNotification {
NSInteger selectedRow = [myTableView selectedRow];
NSTableRowView *myRowView = [myTableView rowViewAtRow:selectedRow makeIfNecessary:NO];
[myRowView setSelectionHighlightStyle:NSTableViewSelectionHighlightStyleRegular];
[myRowView setEmphasized:NO];
}
Run Code Online (Sandbox Code Playgroud)
并避免蓝色然后灰色设置的舞蹈效果
[_tableView setSelectionHighlightStyle:NSTableViewSelectionHighlightStyleNone];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20595 次 |
| 最近记录: |