2012-10-04 2 views
2

간단한 오디오 페이더를 구현하려고합니다. NSSlider 및 NSSliderCell을 서브 클래 싱하여 그에 따라 그래픽을 그릴 수 있습니다.프로그래밍 방식으로 값을 변경할 때 NSControl의 "valueChanged"호출

Cmd 키를 누른 상태에서 핸들을 클릭 할 때마다 슬라이더를 정의 된 위치로 이동 시키려고합니다. 이것은 대부분의 오디오 응용 프로그램에서 매우 일반적입니다.

슬라이더에 값을 설정하는 것은 완벽하게 작동하지만 내 작업 대상에 값이 변경되었다는 것을 알리기 위해 작업 메서드를 호출하지 않습니다. "NSControl"의 mouseDown 이벤트 처리 중 어딘가에서 발생해야합니다. 내가 유망 보이는 NSControl의 문서에 방법을 발견

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

: 이것은 내가 지금까지 가지고 무엇

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

theAction : 대상에서 호출 할 수있는 선택. 선택기가 NULL이면 메시지가 보내지지 않습니다.

theTarget : 메시지를 수신 할 대상 개체입니다. 객체가 이 아닌 경우 응용 프로그램은 응답자 체인에서 메시지를 처리 ​​할 수있는 객체 을 검색합니다. 작업을 전달하는 방법에 대한 자세한 내용은 NSActionCell의 클래스 설명을 참조하십시오.

하지만 선택기의 이름이 무엇인지 모릅니다. 표적은 아마 최고 일 것입니까?

어떤 도움을 주셔서 감사합니다!

최저

,

플로

답변

2

이 동작은 이미 슬라이더에 사용하는 액션 메소드의 이름이 될 수 있으며, 대상은 그 방법이 구현되는 클래스 인스턴스해야합니다. 앱 위임에 IBAction를했다 경우에 따라서, 예를 들어, sliderReport라는 슬라이더에 연결된 것을 : 다음을 수행하십시오

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

추가 참고 : 나는 당신의 질문에서 가정 같은 IBAction를 호출하고 싶었 그 슬라이더에 연결되어 있지만 원하는 경우 다른 선택기를 보낼 수 있습니다. 슬라이더 값이 변경된 방법을 구별해야하는 경우 다른 방법을 사용하는 것이 좋습니다. 원하는대로 이름을 붙일 수 있습니다 (끝에 콜론이 있으므로 필요한 경우 발신자 인수로 보낼 수 있습니다).

2

직접 답변을 찾았습니다. @rdelmar의 대답도 작동 할 수 있지만 더 이상 동작 방법의 이름을 변경하지 않습니다.

- (void) mouseDown:(NSEvent *)theEvent 
{ 
    if (([theEvent modifierFlags] & NSCommandKeyMask) != 0) 
    { 
     [self setFloatValue:100.0f]; 
     [self.target performSelector:self.action withObject:self]; 
    } 
    else 
     [super mouseDown:theEvent]; 
} 
:

내가 수동으로 작업 메서드를 트리거의 보편적 인 방법을 발견
관련 문제