我有一个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];
}
答案 0 :(得分:1)
您可以使用NSTabView
并以编程方式在标签之间切换。
确保未显示实际标签,因为它在用于此目的时看起来很愚蠢。