相关疑难解决方法(0)

在基于视图的NSTableView上更改选择颜色

OS X应用程序中的标准突出显示颜色为蓝色.

是否可以将其更改为其他颜色,例如灰色?

请注意,我NSTableView从OS X 10.7开始使用新的基于视图的可用.

cocoa objective-c nstableview osx-lion

42
推荐指数
4
解决办法
2万
查看次数

单击时如何不突出显示NSButton的模板图像?

我在NSTableView的每一行都有NSButtons.

按钮图像在IB中设置,是带alpha通道的黑色图标:

在此输入图像描述

窗口设置为暗模式:

window?.appearance = NSAppearance(named: NSAppearanceNameVibrantDark)
Run Code Online (Sandbox Code Playgroud)

并进入正常模式:

window?.appearance = nil
Run Code Online (Sandbox Code Playgroud)

目标是窗口为白色时按钮应为黑色,窗口较暗时应为白色,单击时不改变.

在暗模式下,为了实现颜色变化,我在NSTableCellView子类中将按钮的图像"template"属性设置为true:

public override func awakeFromNib() {
    if darkMode {
        button.image?.isTemplate = true
    } else {
        button.image?.isTemplate = false
    }
} 
Run Code Online (Sandbox Code Playgroud)

IB中的按钮是这样制作的:

在此输入图像描述

这在macOS 10.12 Sierra中运行良好:当窗口为白色时,单击黑色按钮不会改变其外观,这是完美的.

但是当窗口很暗时,点击白色按钮使其变黑,这在我的情况下是不可接受的(*).此外,模板图像在macOS 10.11 El Capitan中不起作用.

好:

在此输入图像描述

点击,不行:

在此输入图像描述

然后再次点击黑色按钮使其再次变白......

我的问题是:如何在单击时强制NSButton不突出显示模板图像?

我认为这是因为"瞬间变化"类型,但使用其他"瞬间"类型并没有改变任何东西,我也不能将类型设置为"自定义"(IB拒绝).

请注意,与macOS 10.12相比,这些模板图像在macOS 10.11中的行为有所不同.在Sierra中无缝工作的设置组合在El Capitan中不起作用.这也是我设置奖金的原因:我需要两个系统的解决方案.如果没有解决方案并且您知道原因,那么您的解释也是可以接受的答案.

(*)在模板图像工作的Sierra上可以使用一种解决方法,用于在use button.cell?.setCellAttribute(.cellLightsByContents, to: 0)单击时停止按钮更改颜色(尽管仍有短暂的闪光).但是在El Capitan中,按钮在黑暗模式下是黑色的,所以这不适用.

macos cocoa nswindow nsbutton

10
推荐指数
0
解决办法
623
查看次数

如何使用Implicitly Unwrapped Optionals?

我正在将NSView移植到Swift,我需要使用Quartz CGContextAddPath.

import Cocoa

class MYView: NSView {

    init(frame: NSRect) {
        super.init(frame: frame)
    }

    override func drawRect(dirtyRect: NSRect) {
        super.drawRect(dirtyRect)


        NSColor .redColor() .set()
        NSRectFill(self.bounds)
        var p :CGMutablePathRef = CGPathCreateMutable()
        var ctx =  NSGraphicsContext.currentContext().graphicsPort()
        CGContextAddPath(ctx, p) // compiler rejects this line

    }

}
Run Code Online (Sandbox Code Playgroud)

你怎么理解这个错误信息?

Cannot convert the expression's type 'Void' to type 'CGContext!'
Run Code Online (Sandbox Code Playgroud)

CGContextAddPath的Swift签名是:

func CGContextAddPath(context: CGContext!, path: CGPath!)
Run Code Online (Sandbox Code Playgroud)

我的错误是什么?

我用这个时:

let context = UnsafePointer<CGContext>(ctx).memory
Run Code Online (Sandbox Code Playgroud)

我现在有一个运行时错误:

Jun 3 15:57:13 xxx.x SwiftTest[57092] <Error>: CGContextAddPath: invalid context 0x7fff73bd0060. This is a serious error. …

swift

5
推荐指数
1
解决办法
1788
查看次数

在基于NSTableView的视图中处理自定义选择样式

如何为基于视图绘制自己的自定义选择样式NSTableView?我尝试BOOL在我的NSTableCellView子类中放置一个var 并将其设置为YES如果单击它然后我可以成功绘制我的自定义选择.但我怎么改变这种BOOL变种到NO被点击另一种观点是什么时候?谢谢你的帮助.

编辑:阅读完NSTableView文档后,看起来我需要子类化NSTableRowView来覆盖选择绘图,但是我如何处理我的NSTableRowView子类?如何让表格使用它?

macos user-interface cocoa objective-c nstableview

4
推荐指数
1
解决办法
5278
查看次数