在NSPopover中切换NSView

时间:2013-08-03 22:15:21

标签: objective-c cocoa nsview nspopover

我有一个NSPopover,其中包含一个视图(toolbarView)。此工具栏包含两个按钮(按钮1和按钮2)。按下按钮1时,激活“showView1”方法,并在toolbarView下面添加view1。类似地,当按下按钮2时,激活“showView2”方法并在toolbarView下面添加view2。

我在activeView中存储了toolbarView下面显示的视图,因此在切换视图时,此视图始终是removeFromSuperview(toolbarView)。

代码可以工作,你可以来回切换视图,但是,切换视图时会出现闪烁现象。我尝试了很多东西(主要是在两个视图上都使用setHidden),但是如果没有这种烦人的闪烁,我就无法工作。代码有问题吗?我是否应该将两个视图放入tabless选项卡视图?

- (void)changeView:(NSView*)view {

    [view setHidden:YES];
    [_activeView setHidden:YES];
    [_activeView removeFromSuperview];

    CGRect toolbarRect = _toolbarView.frame;
    toolbarRect.size = _toolbarInitSize;

    NSLog(@"View   [x: %f y: %f w: %f h: %f", view.frame.origin.x, view.frame.origin.y, view.frame.size.width, view.frame.size.height);
    NSLog(@"Toolbar [x: %f y: %f w: %f h: %f", _toolbarView.frame.origin.x, _toolbarView.frame.origin.y, _toolbarView.frame.size.width, _toolbarView.frame.size.height);

    toolbarRect.size.width = view.frame.size.width;
    _toolbarView.frame = toolbarRect;

    [_toolbarView addSubview:view];
    [view setFrame:[_toolbarView bounds]];

    // Move view down
    CGRect rect = view.frame;
    rect.origin.y -= toolbarRect.size.height;
    view.frame = rect;

    NSSize frameSize = self.popover.contentSize;
    frameSize.width  = toolbarRect.size.width;
    frameSize.height = toolbarRect.size.height + view.frame.size.height;
    self.popover.contentSize = frameSize;

    [view setHidden:NO];

    _activeView = view;
}

- (IBAction)showView1:(id)sender {
    [self changeView:_view1];
}

- (IBAction)showView2:(id)sender {
    [self changeView:_view2];
}

1 个答案:

答案 0 :(得分:1)

您可以使用NSTabView并以编程方式在标签之间切换。

确保未显示实际标签,因为它在用于此目的时看起来很愚蠢。