【问题标题】:Behind view accessible though view is disable mac os x尽管视图被禁用 mac os x 后视图可访问
【发布时间】:2017-11-08 08:54:45
【问题描述】:

我在我的 mac 应用程序中使用LIBRARY。问题就在这里,就像我在 viewcontroller 中添加 childviewcontroller 作为子视图并禁用该视图,尽管它是可访问的。你可以在这个VIDEO看到。

还有我的STORYBOARD。你可以看到customview和view_main。

我还制作了NSView 的自定义类来启用和禁用它。以下是通过访问权限禁用该视图的代码。

@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];
        }
    }
}

这是我点击按钮的代码

#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"];
    
}

我不知道为什么在我的其他视图上调用按钮操作背后的原因。我应该怎么做才能阻止该按钮动作。

请帮帮我,我卡在这里

【问题讨论】:

    标签: ios objective-c macos nsview nsbutton


    【解决方案1】:

    尝试在您的子视图的类(NSView* 的子类)上实现这些方法,以避免鼠标点击流血。请注意,我不叫 super!

    NSView 是 NSResponder 的子类,默认情况下,未处理的事件会向上传递到响应者链。这是您示例中的超级视图。解决方案是处理事件而不是调用super。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-30
      • 1970-01-01
      • 1970-01-01
      • 2021-06-05
      • 1970-01-01
      • 2012-02-06
      • 2013-11-10
      相关资源
      最近更新 更多