1

我有一个 NSComboBox。我已经设置了一个动作选择器。当盒子被隐藏时,选择器会触发,即使用户从未接触过它。是的,我需要隐藏它。

IBOutlet NSComboBox *comboBox;

[comboBox setAction:@selector(onComboBoxSelection:)];

- (void)onComboBoxSelection:(id)sender
{
   NSLog(@"Why does this fire twice");
   //My code doesn't actually set hidden here, it's just for proof while debugging the issue.
   [comboBox setHidden:YES];
}

为什么隐藏 NSControl 会触发它的选择器?修复它的最佳方法是什么?

更新: 我已经通过包装方法来修复它。但我仍然想了解原因或其他解决方法。

- (void)onComboBoxSelection:(id)sender
{
   if(![sender isHidden]{
     NSLog(@"Now only fires once");
     //My code doesn't actually set hidden here, it's just for proof while debugging the issue.
     [comboBox setHidden:YES];
   }
}
4

2 回答 2

2

在第二次调用时设置断点onComboBoxSelection:并查看回溯(bt在调试器中键入以查看回溯)。这将解释发生了什么。

组合框既是文本字段又是弹出窗口,它将触发两者的操作。当编辑结束时触发文本字段动作,或者通过按下 Return 键或者当它退出第一响应者时(例如,跳出到另一个字段)。

当您隐藏组合框时,文本字段将退出第一响应者并触发其操作。

您可能想要做的是检查组合框的值是否实际发生了变化,然后才继续隐藏组合框等。

另一种选择是使用数据绑定来观察组合框的变化。将组合框绑定value到控制器上的属性。然后在控制器中实现属性设置器。

于 2012-12-05T22:12:59.190 回答
-1

试试这个[comboBox setHidden:1];

于 2012-12-03T19:58:36.660 回答