2012-07-31 17 views
9

Ich habe eine benutzerdefinierte Ansicht NSView und ich möchte Benutzerinteraktion deaktivieren, aber ich bin mir nicht sicher, wie dies zu tun ist.Wie Benutzerinteraktion in einer benutzerdefinierten Ansicht deaktivieren

Meine Idee war:

[myView setEnabled:NO]; 

aber es ist falsch und funktioniert nicht. Wie kann ich es so machen, dass es nur für den Benutzer sichtbar ist und sonst nichts?

+0

try [myView setUserInteractionEnabled: NO]; –

+4

@CodersParadise: Diese Frage betrifft OS X, nicht iOS. Es gibt keine solche Eigenschaft oder Methode auf "NSView" ... – NSGod

Antwort

4

Von 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 nicht entweder setEnabled hat: oder setIgnoresMouseEvents:

Implement the hitTest: methodnil zurückzukehren.

+0

Ich mag diese Lösung. Einfach zu implementieren und wesentlich robuster und zuverlässiger als die Unteransichten zu deaktivieren, wenn es sich um Steuerelemente handelt. – DarkDust

+0

Diese Lösung ist perfekt – jimwan

+0

Das hat bei mir überhaupt nicht funktioniert. Implementierung von mouseDown: das macht nichts ist die Lösung in meinem Fall. – ghr

2

Unterklasse der NSView und fügen Methode folgende

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

} 
+0

Perfekt. hitTest: Die Rückgabe von nil funktioniert bei mir überhaupt nicht - es scheint zu verhindern, dass mouseDown aufgerufen wird. Also benutze einfach einen leeren mouseDown: – ghr

Verwandte Themen