gpt4 book ai didi

objective-c - setHidden :YES 时 NSComboBox Action 选择器触发

转载 作者:行者123 更新时间:2023-12-03 17:13:33 25 4
gpt4 key购买 nike

我有一个 NSComboBox。我设置了一个 Action 选择器。当该框被隐藏时,即使用户从未触摸过它,选择器也会触发。是的,我需要隐藏它。

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];
}
}

最佳答案

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

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

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

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

另一个选项是使用数据绑定(bind)来观察组合框的更改。将组合框value 绑定(bind)到 Controller 上的属性。然后在 Controller 中实现属性 setter 。

关于objective-c - setHidden :YES 时 NSComboBox Action 选择器触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13690418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com