【问题标题】:Switching NSViews in NSPopover在 NSPopover 中切换 NSView
【发布时间】:2013-08-03 22:15:21
【问题描述】:

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

我将显示在toolbarView下方的视图存储在activeView中,以便切换视图时该视图始终为removeFromSuperview(toolbarView)。

代码有效,您可以来回切换视图,但是切换视图时会出现闪烁。我已经尝试了很多事情(主要是在两个视图上都使用 setHidden),但是如果没有这种烦人的闪烁,我就无法让它工作。代码有问题吗?我应该将两个视图都放入一个无表格的选项卡视图中吗?

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

【问题讨论】:

    标签: objective-c cocoa nsview nspopover


    【解决方案1】:

    您可以只使用NSTabView 并以编程方式在选项卡之间切换。

    确保不显示实际的选项卡,因为它在用于此目的时看起来很傻。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-08
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 2013-04-25
      • 1970-01-01
      相关资源
      最近更新 更多