2015-03-09 2 views
0

У меня установлен NSSlider в непрерывном режиме. Следовательно, когда пользователь перемещает слайдер, мой метод действия вызывается несколько раз. Нам нужно отменить регистрацию только для последнего значения слайдера, и нам не нужно отслеживать столько промежуточных значений. Я понимаю, что я могу отменить регистрацию с помощью disableUndoRegistration на менеджере отмены и вернуть его обратно с помощью enableUndoRegistration, но где я могу их назвать так, чтобы мы не делали несколько регистраций отмены?NSSlider несколько отмененных регистраций

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

ответ

1

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

Это работает! Теперь вопрос в том, что каждый выполнит отмену операции NSSlider, как это, или есть лучший способ? – AmaltasCoder

+0

Другой подход создает подкласс NSSlider. затем переопределите метод mouseDown: 'и уведомите мышь сразу после вызова' mouseDown: 'супер. 'NSSlider' никогда не вызывает' mouseUp: ', поэтому нам нужно обходное решение. но этот способ не изящный, я думаю. – bluedome

Смежные вопросы