2017-06-07 6 views
0

J'utilise LIBRARY dans mon application mac. et le problème est ici comme quand j'ajoute childviewcontroller dans viewcontroller comme sous-vue et désactiver cette vue si elle est accessible. Vous pouvez voir dans ce VIDEO.Derrière la vue accessible si la vue est désactivée mac os x

et mon STORYBOARD. Vous pouvez voir customview et view_main.

Je fais également classe personnalisée de NSView pour l'activer et le désactiver. et ci-dessous est le code pour désactiver cette vue si son accessbile.

@implementation NSView (customview) 
-(void) setEnabled:(BOOL) isEnabled{ 

    for (NSView* subView in self.subviews) { 

     if ([subView isKindOfClass:[NSControl class]]) { 

      [(NSControl*)subView setEnabled:isEnabled]; 
     }else if ([subView isKindOfClass:[NSView class]]) { 

      [subView setEnabled:isEnabled]; 
     } 
    } 
} 

Voici mon code sur le bouton cliquez

#pragma -mark All action methods 
- (IBAction)sidebarChanged:(ITSidebar *)sender { 
    NSLog(@"%@: %lu", [sender selectedItem], (unsigned long)[sender selectedIndex]); 
} 
- (IBAction)starClicked:(id)sender { 

    //[self.label setStringValue:@"Star"]; 
    for (NSView* v in [self.custom_view subviews]) { 
     [v removeFromSuperview]; 
    } 
    [self.view_main setEnabled:YES]; 
    [self.tbl_emojis setEnabled:YES]; 

} 
- (IBAction)watchClicked:(id)sender { 
    for (NSView* v in [self.custom_view subviews]) { 
     [v removeFromSuperview]; 
    }  

    ContactUsVC* vc = [[ContactUsVC alloc] initWithNibName:@"ContactUsVC" bundle:nil]; 
    vc.view.frame = self.custom_view.bounds; 
    [self addChildViewController:vc]; 
    [self.custom_view addSubview:vc.view]; 
    [self.view_main setEnabled:NO]; 
    [self.tbl_emojis setEnabled:NO]; 

} 
- (IBAction)tagClicked:(id)sender { 
    NSLog(@" Tag clicked"); 
    for (NSView* v in [self.custom_view subviews]) { 
     [v removeFromSuperview]; 
    } 

    HelpVC* vc = [[HelpVC alloc] initWithNibName:@"HelpVC" bundle:nil]; 
    vc.view.frame = self.custom_view.bounds; 
    [self addChildViewController:vc]; 
    [self.custom_view addSubview:vc.view]; 
    [self.view_main setEnabled:NO]; 
    [self.tbl_emojis setEnabled:NO]; 

    //[self.label setStringValue:@"Tag"]; 
} 
- (IBAction)trashClicked:(id)sender { 
    NSLog(@" Trash clicked"); 
    for (NSView* v in [self.custom_view subviews]) { 
     [v removeFromSuperview]; 
    } 
    //id animator = [[ContactUsVC alloc] init]; 
    ChangePasswordVC* vc = [[ChangePasswordVC alloc] initWithNibName:@"ChangePasswordVC" bundle:nil]; 
    vc.view.frame = self.custom_view.bounds; 
    [self addChildViewController:vc]; 
    [self.custom_view addSubview:vc.view]; 
    [self.view_main setEnabled:NO]; 
    [self.tbl_emojis setEnabled:NO]; 

    // [self.label setStringValue:@"Trash"]; 

} 

Je ne sais pas pourquoi derrière l'action du bouton est appelé mon autre point de vue. Que dois-je faire pour empêcher cette action de bouton.

S'il vous plaît aidez-moi je suis coincé ici

Répondre

0

Essayez de mettre en œuvre ces méthodes sur la classe de votre sous-vue (de subClass de NSView *) afin d'éviter des saignements par clics de souris. Notez que je n'appelle pas super! NSView est une sous-classe de NSResponder, par défaut, les événements non gérés sont transmis à la chaîne du répondeur. Ceci est la superview dans votre exemple. La solution est de gérer l'événement et ne pas appeler super.

// Avoid mouse clicks from bleeding through 
- (void) mouseDown:(NSEvent*)event {} 
- (void) mouseDragged:(NSEvent*)event {} 
- (void) mouseUp:(NSEvent*)event {}