我有一个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];
}
}
答案 0 :(得分:2)
在onComboBoxSelection:
中设置断点,并在第二次调用时查看回溯(在调试器中键入bt
以查看回溯)。这将解释发生了什么。
组合框既是文本字段又是弹出窗口,它将触发两者的操作。编辑结束时触发文本字段操作,方法是点击Return键或者当它退出第一个响应者时(例如,跳出到另一个字段)。
隐藏组合框时,文本字段会撤消第一个响应者并触发其操作。
您可能要做的是检查组合框值是否实际更改,然后继续隐藏组合框等。
另一种选择是使用数据绑定来观察对组合框的更改。将组合框value
绑定到控制器上的属性。然后在控制器中实现属性设置器。
答案 1 :(得分:-1)
试试这个[comboBox setHidden:1];