gpt4 book ai didi

objective-c - 以编程方式更改值时调用 NSControl 的 "valueChanged"

转载 作者:搜寻专家 更新时间:2023-10-30 20:06:14 26 4
gpt4 key购买 nike

我将要实现一个简单的音频推子。我将 NSSlider 和 NSSliderCell 子类化,以便能够相应地绘制图形。

只要在按下 Cmd 键的情况下单击 handle ,我希望 slider 跳到定义的位置。这在大多数音频应用程序中很常见。

将值设置为 slider 工作正常,但它不会调用操作方法来通知我的目标值已更改。这一定发生在“super”的 mouseDown 事件处理中的某处,可能在 NSControl 中。这是我到目前为止得到的:

- (void) mouseDown:(NSEvent *)theEvent
{
if ( ([theEvent modifierFlags] & NSCommandKeyMask) > 0)
[self setFloatValue:100.0f];
else
[super mouseDown:theEvent];
}

我在 NSControl 文档中找到了一个看起来很有前途的方法:

-(BOOL)sendAction:(SEL)theAction to:(id)theTarget Parameters : 

theAction : The selector to invoke on the target. If the selector is NULL, no message is sent.

theTarget : The target object to receive the message. If the object is nil, the application searches the responder chain for an object capable of handling the message. For more information on dispatching actions, see the class description for NSActionCell.

但我不知道选择器的命名方式。目标可能是 super 的?

非常感谢任何帮助!!

最好的,

弗洛

最佳答案

Action 可以是您已经用于 slider 的 Action 方法的名称,目标应该是实现该方法的类实例。因此,例如,如果您的应用程序委托(delegate)中有一个 IBAction 连接到名为 sliderReport: 的 slider ,那么请执行以下操作:

[self sendAction:@selector(sliderReport:) to:[NSApp delegate]];

附加说明:根据您的问题,我假设您想调用已连接到 slider 的相同 IBAction,但如果需要,您可以发送不同的选择器——如果您需要区分 slider 值的变化方式改变了,有一个不同的方法将是要走的路。您可以随意命名它(末尾有一个冒号,因此如果需要,它可以将自己作为发送者参数发送)。

关于objective-c - 以编程方式更改值时调用 NSControl 的 "valueChanged",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12735593/

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