2012-03-26 5 views
1

구체적으로 말하자면, 편집을 허용하지 않고 NSTableCellView에서 토큰 방식으로 데이터를 표시하기 때문에 마우스 이벤트를 무시하고 싶습니다. NSTokenField .NSControl (예 : NSTokenField)에서 마우스 이벤트 무시 방법

토큰 필드를 enabled = NO으로 설정하면 토큰이 회색으로 표시되고 텍스트를 읽기 어려워집니다.

토큰 필드의 을 설정하면 토큰 필드의 모양을 그대로 유지하면서 편집을 막을 수 있습니다. 토큰 위로 마우스를 가져 가면 불이 켜집니다. 내가 그걸 막을 수 있다면, 나는 사업에 종사 할거야.

뭔가 서브 클래스를 만들고 약간의 NSResponder 메서드를 재정의해야한다고 생각합니다.하지만 할 일이 확실하지 않습니다. NSTokenField을 서브 클래스 화하고 mouseEntered:mouseMoved:을 무시하려고했지만 아무 것도 작동하지 않았습니다.

+0

필드는 아마도 [추적 영역] (http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSTrackingArea_class/Reference/Reference.html)을 사용하여 마우스 입력/나가기를 얻었을 것입니다 이벤트. 'mouseEntered :'를 왜곡 한 이유를 정확히 모르겠지만, 서브 클래 싱되지 않은 필드에서'[field setTrackingArea : nil]'을 시도해보고 무슨 일이 일어나는 지 볼 수 있습니다. –

+0

그 점을 지적 해 주셔서 고맙습니다. 클래스를 만들 때'drawRect :'가 오버라이드되어 아무 것도 수행하지 못했습니다. 나는 for ([tokenField trackingAreas]의 NSTrackingArea * trackingArea)를 시도했다. { [tokenField removeTrackingArea : trackingArea]; }',하지만 주사위는 없습니다. 또한,'mouseEntered :'에 덧붙여'mouseMoved :'를 오버 라이딩 해 보았습니다 만, 그 중 하나는 작동하지 않았습니다 ... – yuji

+0

@yuji : 테스트 할 순간 내 컴퓨터가 없습니다. 아이디어. 당신은이 클래스를 위해 당신 자신의 대체물을 쓰길 원할 것입니다. 예를 들어'BWToolkit'을보십시오. –

답변

2

많은 것을 시도한 후에, Iulius Cæsar의 제안에 따라 작업하게되었습니다.

비결은 NSTextField를 서브 클래스 화해, 오버라이드 (override)하는 것이 었습니다 trackingAreas :

필드 스크롤 뷰에 있었고, 때로는 추적 영역 때문에, 그것은 아주 충분하지 만들 때
- (NSArray *)trackingAreas 
{ 
    return [NSArray array]; 
} 

단순히 필드의 추적 영역을 삭제 다시 만들어야합니다.

+0

다행히 제 제안이 도움이 되었어요! 나는 이것이 바른 길인지 완전히 확신하지 못했습니다. –