NSComboBox以编程方式关闭弹出窗口

时间:2014-09-23 15:22:23

标签: objective-c cocoa nscombobox

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

当弹出窗口打开时,NSComboBox似乎有一个错误,控制器被删除然后释放。出于某种原因,NSComboBox的dealloc在破坏之前不会清除弹出窗口。

编辑:只是为了澄清 - 只有在打开弹出列表时才会出现此错误。否则控制器会正确且干净地释放。

修改编辑: 这就是重现它的方法。

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

1 个答案:

答案 0 :(得分:-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
}

itemEnabled的初始值设为YES

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