[TRUKéASTUCE] Simuler une désactivation (setEnabled:NO) sur une NSTableView
Bru
Membre
Voici un truc qui permet de rendre l'aspect d'une NSTableView désactivée. La technique porte sur la création d'une customView qui "grise" la NSTableView en se superposant dessus.
La première étape est l'implémentation de la classe customView, nommée ici DisabledTableView :
fichier DisabledTableView.h :
et le fichier DisabledTableView.m :
.
La première étape est l'implémentation de la classe customView, nommée ici DisabledTableView :
fichier DisabledTableView.h :
<br />#import <Cocoa/Cocoa.h><br /><br />@interface DisabledTableView : NSControl<br />{<br />Â Â BOOL _hsve;<br />Â Â BOOL _vsve;<br />Â Â NSScrollView *_sv;<br />}<br />- (id)initWithScrollView:(NSScrollView *)scrollView;<br />@end<br />
et le fichier DisabledTableView.m :
<br />#import "DisabledTableView.h"<br /><br />@implementation DisabledTableView<br />- (id)initWithScrollView:(NSScrollView *)scrollView<br />{<br />Â Â if ([self initWithFrame:[scrollView frame]])<br />Â Â {<br />Â Â Â Â _sv=scrollView;<br />Â Â Â Â if ([scrollView hasHorizontalScroller])<br />Â Â Â Â {<br />Â Â Â Â Â Â _hsve=[[scrollView horizontalScroller] isEnabled];<br />Â Â Â Â Â Â [[_sv horizontalScroller] setEnabled:NO];<br />Â Â Â Â }<br />Â Â Â Â if ([scrollView hasVerticalScroller])<br />Â Â Â Â {<br />Â Â Â Â Â Â _vsve=[[scrollView verticalScroller] isEnabled];<br />Â Â Â Â Â Â [[_sv verticalScroller] setEnabled:NO];<br />Â Â Â Â }<br />Â Â Â Â [self setAutoresizingMask:[scrollView autoresizingMask]];<br />Â Â }<br />Â Â return self;<br />}<br /><br />- (BOOL)isOpaque<br />{<br />Â Â return NO;<br />}<br /><br />- (void)drawRect:(NSRect)rect<br />{<br />Â Â [[NSColor colorWithDeviceWhite:1.0 alpha:0.7] set];<br />Â Â [NSBezierPath fillRect:[self bounds]];<br />}<br /><br />- (void)dealloc<br />{<br />Â Â if ([_sv hasHorizontalScroller]) [[_sv horizontalScroller] setEnabled:_hsve];<br />Â Â if ([_sv hasVerticalScroller]) [[_sv verticalScroller] setEnabled:_vsve];<br />Â Â [super dealloc];<br />}<br />@end<br />
.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Ceci ce fait par un simple appel à une procédure C, qui appellée depuis le contrôleur "contrôlant" la tableView, fait apparaà®tre/disparaà®tre la DisabledTableView en fonction de l'état enabled de la tableView.
procédure C :
Voici un exemple d'utilisation :
.