1

対応するViewControllerを追加するNSWindowControllerがあります。ViewController の 1 つでタッチ イベントを処理したいと思います。私のクラスは

Window.h

@interface WindowController : NSWindowController<NSToolbarDelegate>

@property   (nonatomic, strong)    NSViewController                  *currentViewController;

@property   (assign)               IBOutlet        NSView            *targetView;

@end

Window.m

-(void)addViewController
{
NSViewController *currentController = [[currentControllerClass alloc]initWithNibName:controllerIdentifier bundle:nil];
self.currentViewController = currentController;
[self.targetView addSubview:self.currentViewController.view];    
[self.currentViewController.view setFrame: [self.targetView bounds]];
}
-(void) awakeFromNib{

    [super awakeFromNib];
    [self.window setIgnoresMouseEvents:NO];
    [self setToolbarToPracticeView];
}

-(void)mouseDown:(NSEvent *)theEvent
{
    NSLog(@"Window > Mouse down");
}

ここでマウスダウンイベントを印刷できます。これで、viewController ができました。

ViewController.h

@interface ViewController : NSViewController
@end

ViewController.m

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Initialization code here.
    }
    return self;
}

-(void)awakeFromNib
{
    [self.view setAcceptsTouchEvents:YES];
}

-(BOOL)acceptsFirstResponder
{
    return YES;
}
-(void)mouseDown:(NSEvent *)theEvent
{
    NSLog(@"ViewController > mouse down");
}

ViewController で mouseDown の制御を取得したいと思います。ここで何か不足していますか?

ありがとう。

4

2 に答える 2

4

カスタム NSView を作成し、そのプロトコルで mouseDown メソッドをデリゲートします。ViewController で customView をインポートして使用し、そのメソッドをデリゲートします。ビューをクリックすると、mouseDown イベントがトリガーされます。

于 2014-01-16T08:18:59.080 に答える
0

私の答えはわかりませんが、Window.m (ちなみに WindowController.m と呼ぶ必要があります) で [super mouseDown:theEvent] を呼び出さないと、レスポンダー チェーンが壊れています。したがって、View Controllerはそれを見ることができません。私は正しいですか?

于 2014-01-02T11:12:59.320 に答える