如何设置NSFontPanel的默认值?

时间:2011-07-11 22:56:13

标签: xcode cocoa interface-builder macruby nsfontpanel

我正在为我的酷应用设置偏好设置窗口,该窗口会显示一些文字。在偏好设置中,我设置了一个打开NSFontPanel的按钮。我的应用程序存储用户首选的文本颜色和字体,并始终打开这些设置,以便用户永远不必看到以他们不喜欢的颜色或字体显示的文本。

问题是,虽然我的应用能够记住这些偏好,但NSFontPanel有问题。首次打开字体面板时,将重置所有字段的默认值。在摆弄它们,关闭面板,然后重新打开它之后,将保留正确的值。只有在我第一次打开面板时才会出现此问题。

我不明白为什么会这样!

我的应用程序启动时,我一直小心设置面板的字体和颜色,正如您可以从此片段中看到的那样:

def show_entry_font_menu(sender)
  font_manager = NSFontManager.sharedFontManager    
  color_panel = NSColorPanel.sharedColorPanel

  font_manager.setDelegate self
  color_panel.setDelegate self

  font_manager.setSelectedFont(preferences.entry_font, isMultiple:false)

  font_panel = font_manager.fontPanel(true)
  font_panel.makeKeyAndOrderFront(sender)
  attributes = preferences.entry_font_attributes
  color = preferences.entry_font_color

  font_manager.setSelectedAttributes(attributes, isMultiple:false)
  color_panel.setColor(color) if preferences.entry_font_color

  self.did_open_font_panel = true
end

1 个答案:

答案 0 :(得分:4)

初始化sharedFontPanel有点奇怪。如果您在第一次创建字体之前设置字体,那可以正常工作,但设置属性不会。

您首先要做的是makeKeyAndOrderFront,然后设置属性。一旦这样创建了面板,它就会第一次正确地反映setSelectedAttributes。

  font_panel.makeKeyAndOrderFront(sender)
  font_manager.setSelectedAttributes(attributes, isMultiple:false)