我有同样的问题,除了我在 OSX 10.7 上使用 xcode 4.x
也许它是 xcode 4.x 的东西?
我注意到的是,当我在父 NSTextField 上调用 setEnabled(从 YES 更改为 NO 或 NO 更改为 YES)时,在我的 NSTextFieldCell 初始化之后,但在该 NSCell 上的 drawWithFrame 被自动调用之前,我的子类 NSTextFieldCell 上的 drawWithFrame 不会被调用.
但是,如果我调用 setEnabled(在初始化我的子类 NSTextFieldCell 之后)并且没有发生任何更改(即 setEnabled:YES 但它已经设置为 YES),那么 drawWithFrame 确实会被调用。
不幸的是,我需要从 YES 到 NO 到 YES 执行 setEnabled,因为我想在进行服务器调用时禁用我的 NSTextField,然后在回调中启用它。如果回调是(例如“错误密码”),我需要自定义绘制 NSTextFieldCell 边框红色..我必须通过覆盖 drawWithFrame 来做到这一点。
我的猜测是 setEnabled 使用 NSGraphicsContext 并执行 savesGraphicsState/restoreGraphicsState(可能有错误),这会抛出 NSTextFieldCell/drawWithFrame 中使用的图形上下文。
我的猜测是,setEnabled 中的 NSGraphicsContext 仅在发生更改时使用(setEnabled 从 YES 到 NO 或 NO 到 YES),因为当没有发生更改时,我没有问题......我认为这是有道理的渲染新图形以向用户显示视图不可选择或不可编辑是没有意义的,因为它确实已经看起来不可选择或不可编辑。