2012-07-31 59 views
9

我有一個自定義視圖NSView,我想禁用userinteraction,但我不知道如何執行此操作。如何禁用自定義視圖中的用戶交互

我的想法是:

[myView setEnabled:NO]; 

但它是錯誤的,不工作。我怎麼能這樣做,它只是爲用戶可見,而沒有別的?

+0

嘗試[MyView的setUserInteractionEnabled:NO]; – 2012-07-31 12:59:20

+4

@CodersParadise:這個問題是關於OS X,而不是iOS。 'NSView'上沒有這樣的屬性或方法... – NSGod 2013-04-09 00:28:56

回答

4

here

// 
// NSView-DisableSubsAdditions.m 
// Can Combine Icons 
// 
// Created by David Remahl on Tue Dec 25 2001. 
// Copyright (c) 2001 Infinity-to-the-Power-of-Infinity. All rights reserved. 
// 

#import "NSView-DisableSubsAdditions.h" 

@implementation NSView(DisableSubsAdditions) 

- (void)disableSubViews 
{ 
    [self setSubViewsEnabled:NO]; 
} 

- (void)enableSubViews 
{ 
    [self setSubViewsEnabled:YES]; 
} 

- (void)setSubViewsEnabled:(BOOL)enabled 
{ 
    NSView* currentView = NULL; 
    NSEnumerator* viewEnumerator = [[self subviews] objectEnumerator]; 

    while(currentView = [viewEnumerator nextObject]) 
    { 
     if([currentView respondsToSelector:@selector(setEnabled:)]) 
     { 
      [(NSControl*)currentView setEnabled:enabled]; 
     } 
     [currentView setSubViewsEnabled:enabled]; 

     [currentView display]; 
    } 
} 

@end 
8

的NSView沒有任何的setEnabled:或setIgnoresMouseEvents:

實施the hitTest: method返回nil

+0

我喜歡這個解決方案。與禁用子視圖(如果它們是控件)相比,實現起來簡單,方式更強大,更可靠。 – DarkDust 2015-02-18 08:18:24

+0

這個解決方案是完美的 – jimwan 2017-05-22 02:30:02

+0

這根本不適用於我。實現mouseDown:在我的情況下,什麼都不做是解決方案。 – ghr 2017-05-31 00:25:52

2

子類中的NSView並添加以下方法

-(void)mouseDown:(NSEvent *)theEvent 
{ 

} 
+0

完美。 hitTest:返回nil根本不適用於我 - 它似乎阻止了mouseDown被調用。所以只需使用一個空的mouseDown: – ghr 2017-05-31 00:27:25

相關問題