1

有没有办法以编程方式关闭 NSComboBox 弹出窗口?

当弹出窗口打开时,NSComboBox 似乎存在一个错误,并且控件被删除然后释放。出于某种原因, NSComboBox 的 dealloc 在销毁之前不会清除弹出窗口。

编辑:只是为了澄清-这个错误仅在打开弹出列表时发生。否则控制被正确和干净地释放。

编辑编辑:这是如何重现它。

  • 创建一个新的 Cocoa 应用程序。
  • 关闭自动引用计数。
  • 在 @(applicationDidFinishLaunching) 创建一个新的 NSComboBox 并将其存储到一个成员。
  • 将组合框添加到窗口的 contentView。
  • 使用键盘快捷键创建一个新菜单项并绑定到选择器。
  • 在菜单项的选择器中:从视图中移除组合框并释放成员。不要忘记将其设置回零。
  • 运行应用程序。
  • 单击组合框以显示弹出窗口。
  • 使用快捷方式删除组合框。
4

1 回答 1

-2

您可以通过使用NSComboBox委托方法-comboBoxWillPopUp:-comboBoxWillDismiss:控制 BOOL 来检查您的代码或灰显菜单项。

BOOL属性可用于控制菜单项的启用。

设置组合框的委托。

到委托的接口添加

@property BOOL itemEnabled;

并在实现中添加

- (void)comboBoxWillPopUp:(NSNotification *)notification {
    self.itemEnabled = NO;
}
- (void)comboBoxWillDismiss:(NSNotification *)notification {
    self.itemEnabled = YES; //re-enabled when dismissed
}

将初始值设置itemEnabledYES

在 xib 中,将菜单项的 Enabled 属性绑定到委托,并将 Model Key Path 设置为self.itemEnabled

于 2014-09-24T15:41:59.280 回答