我有一个包含视图(toolbarView)的 NSPopover。此工具栏包含两个按钮(按钮 1 和按钮 2)。当按下按钮 1 时,“showView1”方法被激活,并且 view1 被添加到工具栏视图下方。类似地,当按钮 2 被按下时,“showView2”方法被激活,并且 view2 被添加到工具栏视图下面。
我将显示在工具栏视图下方的视图存储在 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];
}