2012-07-31 24 views
9

Tengo una vista personalizada NSView y quiero deshabilitar la interacción con el usuario, pero no estoy seguro de cómo hacerlo.Cómo deshabilitar la interacción del usuario en una vista personalizada

Mi idea era:

[myView setEnabled:NO]; 

pero que está mal y no funciona. ¿Cómo puedo hacerlo para que solo sea visible para el usuario y nada más?

+0

try [myView setUserInteractionEnabled: NO]; –

+4

@CodersParadise: esta pregunta es sobre OS X, no iOS. No existe tal propiedad o método en 'NSView' ... – NSGod

Respuesta

4

De 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 no tiene ya sea setEnabled: o setIgnoresMouseEvents:

Implementar the hitTest: method para volver nil.

+0

Me gusta esta solución. Simple de implementar y mucho más robusto y confiable que deshabilitar las subvistas si son controles. – DarkDust

+0

Esta solución es perfecta – jimwan

+0

Esto no funcionó para mí en absoluto. Implementando mouseDown: eso no hace nada es la solución en mi caso. – ghr

2

subclase la NSView y añadir método siguiente

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

} 
+0

Perfecto. HitTest: return nil no funciona para mí en absoluto; parecía evitar que se invoca mouseDown. Así que solo usa un mouseDown vacío: – ghr

Cuestiones relacionadas