2012-12-13 17 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 stete設置爲highlight,它將鏡像到NSCell

3)那麼啓用的屬性呢? 在我在的NSControl寫了這個代碼的時刻: 而這種代碼在的NSControl

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

你有沒有特別的建議與鼠標事件的工作與自定義的NSControl +的NSCell?

回答

0

你可以做到以下幾點:

創建NSTrackingArea,如果鼠標鑽進你的NSControl這將檢測:

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

然後您將trackingArea添加到您的NSControl:

[yourNSControl addTrackingArea:trackingArea]; 

在你的NSControl子類中都執行

- (void)mouseEntered:(NSEvent *)theEvent 
- (void)mouseExited:(NSEvent *)theEvent 

在那裏,你可以在你的控制器內部或你的控制器本身做一些事情。

希望可以幫到

+0

爲什麼我要修改跟蹤區? – MatterGoal

+0

你根本不需要修改它。它只是一個乾淨的方法,因爲NSControl子類在鼠標進入/退出時自行檢測,因此它可以對其執行操作。 –

+0

我需要模擬一個NSButton的行爲,所以我不需要知道什麼時候鼠標進入/退出我的控制。我只需要知道哪個是在自定義控件上管理鼠標事件的正確方法。 目前我正試圖在NSCell級別進行管理。你認爲這不是一個好主意嗎? – MatterGoal