2012-12-13 13 views
1

관리를 완전히 사용자 정의 NSControl는 완전히 사용자 정의 NSCell와. 이제 마우스 상호 작용을 구현하고 싶습니다. 예를 들어 사용자가 컨트롤을 클릭했을 때 컨트롤 상태를 highlight으로 변경하려고합니다. 질문은 다음과 같습니다.NSControl 및 NSCell에 : 나는이 셀 상태 올바른 방법

1) 마우스 이벤트를 처리해야하는 곳은 무엇입니까? NSControl 또는 직접 NSCell에 있습니까? 나는 NSCell에 서브 클래스에서이 코드로 일하고 있어요 순간

:

-(BOOL)startTrackingAt:(NSPoint)startPoint inView:(NSView *)controlView{ 
    [self setHighlighted:YES]; 

    return YES; 
} 

-(void)stopTracking:(NSPoint)lastPoint at:(NSPoint)stopPoint inView:(NSView *)controlView mouseIsUp:(BOOL)flag{ 
    [self setHighlighted:NO]; 
} 

2)는 NSCell 상태가 자동으로 NSControl에 의해 관리인가? NSControl 스테테를 highlight으로 설정하면 NSCell으로 미러링됩니까?

3) 무엇이 활성화 된 속성입니까? 나는 NSControl에이 코드를 쓴 순간 다음 NSControl

-(void)setEnabled:(BOOL)flag{ 
    [super setEnabled:flag]; 
    [[self cell]setEnabled:flag]; 
    [self updateCell:[self cell]]; 
} 

에서 그리고이 코드는 사용자 지정 NSControl + NSCell에와 마우스 이벤트와 함께 작업 할 특정 제안이있으세요?

답변

0

당신은 다음을 수행 할 수

NSTrackingArea* trackingArea = [[[NSTrackingArea alloc] initWithRect:yourNSControlBoundsRect options:NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways owner:yourNSControl userInfo:nil]; 

그런 다음 당신은 당신의 NSControl에 trackingArea를 추가 : 마우스가 당신의 NSControl에 합격하면 감지

만들기 NSTrackingArea을

[yourNSControl addTrackingArea:trackingArea]; 
당신의 NSControl 서브 클래스에서

모두

- (void)mouseEntered:(NSEvent *)theEvent 
- (void)mouseExited:(NSEvent *)theEvent 
0 구현

여기에 셀 안에 컨트롤을 넣거나 컨트롤 자체로 할 수 있습니다.

희망 하시겠습니까?

+0

왜 추적 영역을 수정해야합니까? – MatterGoal

+0

전혀 수정할 필요가 없습니다. NSControl 서브 클래스는 마우스가 들어갔을 때 나 종료 할 때 자체적으로 감지하기 때문에 깨끗한 접근 방식을 취합니다. –

+0

NSButton 비헤이비어를 시뮬레이트해야 마우스가 내 컨트롤을 입력/종료 할 때를 알 필요가 없습니다. 사용자 정의 컨트롤에서 마우스 이벤트를 관리하는 올바른 방법이 무엇인지 알아야합니다. 현재 NSCell 수준에서 관리하려고합니다. 이것이 좋은 생각이 아니라고 생각합니까? – MatterGoal