当setHidden时,NSComboBox操作选择器触发:YES

时间:2012-12-03 19:39:24

标签: objective-c macos cocoa nscombobox nscontrol

我有一个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];
   }
}

2 个答案:

答案 0 :(得分:2)

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

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

隐藏组合框时,文本字段会撤消第一个响应者并触发其操作。

您可能要做的是检查组合框值是否实际更改,然后继续隐藏组合框等。

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

答案 1 :(得分:-1)

试试这个[comboBox setHidden:1];