2013-09-10 2 views
0

Как мне получить событие мыши в контроллере окна Cocoa или я должен попробовать еще один способ?получить событие мыши в контроллере окна какао

Я разрабатываю функцию, в которой текстовое поле преобразуется в знак большого плюса, когда мышь витает над его областью.

+0

нет концепции мыши/курсора в iPhone или iPad, как ПК, как вы могли навести курсор мыши на iPad/iPhone? : P –

+1

Похоже, что вы должны создавать пользовательский подкласс NSView, который содержит текстовое поле. 'NSView' имеет множество связанных с мышью методов событий. – trojanfoe

+0

@Xman: Вопрос отмечен 'osx' и' cocoa', а не 'ios' и' cocoa-touch'. В OS X есть ** концепции мыши/курсора. – dreamlax

ответ

1

Я бы рекомендовал подклассифицировать NSTextField и обработать события там. Как сказал trojanfoe, у него встроено управление мышью. Плюс к тому, что вы описываете как нечто, что вы можете использовать снова, в том же приложении или другом. Просто настройка класса на ваш пользовательский NSTextField позволит сэкономить время.

Это может выглядеть примерно так:

DCOHoverTextField.h

#import <Cocoa/Cocoa.h> 

/** An `NSTextField` subclass that supports mouse entered/exited events. 
*/ 
@interface DCOHoverTextField : NSTextField 

@end 

DCOHoverTextField.m

#import "DCOHoverTextField.h" 

@interface DCOHoverTextField() 

/* Holds the tracking area for the `NSTextField`. */ 
@property (strong) NSTrackingArea *trackingArea; 

@end 

@implementation DCOHoverTextField 

- (void)updateTrackingAreas { 
    // Remove tracking area if we have one 
    if(self.trackingArea) { 
     [self removeTrackingArea:self.trackingArea]; 
    } 

    // Call super 
    [super updateTrackingAreas]; 

    // Create a new tracking area 
    self.trackingArea = [[NSTrackingArea alloc] initWithRect:self.bounds 
                options: NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways 
                 owner:self 
                userInfo:nil]; 

    // Add it 
    [self addTrackingArea:self.trackingArea]; 
} 

- (void)mouseEntered:(NSEvent *)theEvent { 
    // TODO: Change text field into a plus sign. 
} 

- (void)mouseExited:(NSEvent *)theEvent { 
    // TODO: Change text field back into a regular text field. 
} 

@end 

После создания подкласса, перейдите в Interface Builder, выберите ваш NSTextField и измените класс на созданный подкласс.

+0

Спасибо, сэр. Это решает мою проблему! – donkey

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