objective-c - NSSlider 多次撤销注册

标签 objective-c macos cocoa

我将 NSSlider 设置为连续模式。因此,当用户移动 slider 时,我的操作方法会被多次调用。我们只需要对 slider 的最后一个值进行撤消注册,并且不需要跟踪这么多中间值。我知道我可以在撤消管理器上使用 disableUndoRegistration 关闭撤消注册,然后使用 enableUndoRegistration 将其重新打开,但是我在哪里调用这些,以便我们不会进行多次撤消注册?

- (IBAction) changeSpacing:(id) sender {
    self.someValue = [sender floatValue];    
    //do undo registration, I would prefer to do this only for the last
    //value of the slider
    [[[myDocument undoManager] prepareWithInvocationTarget:self] setSomeValue:oldValue]
}

最佳答案

NSEvent 可能会帮助你。

- (IBAction) changeSpacing:(id) sender {
    self.someValue = [sender floatValue];    

    NSEvent *event = [NSApplication sharedApplication].currentEvent;
    if (event.type == NSLeftMouseUp) {
        // end dragging
        [[[myDocument undoManager] prepareWithInvocationTarget:self] setSomeValue:oldValue];
    }
}

关于objective-c - NSSlider 多次撤销注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28941888/

相关文章:

ios - 为什么 reloadRowsAtIndexPaths 不适用于 iOS 5.0?

windows - 从应用程序调用命令行实用程序会产生安全问题吗?

objective-c - NSCalibrateBlackColorSpace 的未弃用替代品?

objective-c - 为什么这两个 "auto boxing"语句给出不同的结果?

objective-c - XPCService 未从应用程序启动

ios - objective-c:分配与综合/保留

macos - Python 3.3 在 OSX 上找不到任何 pip 安装包?

cocoa - 我可以在发布版本中保留日志记录吗?

objective-c - 如何使用 Cocoa 创建一个有阴影且没有奇怪标题栏的模态表?

xcode - 从 MainMenu.xib 初始化 NSObject