2012-12-13 3 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

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