2013-03-26 68 views
2

我想在按下按钮时在两个NSView控件之间切换。基本上,我有包含NSWindow控件的.xib文件。窗口包含两个子视图和几个按钮。我已经在对象列表中拖动了NSViewController,在xib中又拖了一个NSViewNSViewController有参考从NSWindow和查看是浮动在xib文件中查看。两个nsviews之间的osx切换

问题是,如何在按钮按下时在NSWindow之间切换nsview1和nsview2?这是做到这一点的正确方法吗?

sketch

+1

的一种方法是使用标签视图和隐藏选项卡,然后切换标签... – Gossamer 2013-03-26 20:26:17

回答

8

定义的NSView出口用于其中可交换视图是占位符以及用于在使用中保持参考当前视图控制器的特性。

@property (assign) IBOutlet NSView* mainView; 
@property (strong) NSViewController* currentViewController; 

我使用通用方法进行视图交换(使用autolayout使视图占据整个占位符视图)。

-(void)setMainViewTo:(NSViewController *)controller 
{ 
    //Remove existing subviews 
    while ([[self.mainView subviews] count] > 0) 
    { 
     [self.mainView.subviews[0] removeFromSuperview]; 
    } 
    NSView * view = [controller view]; 
    [view setTranslatesAutoresizingMaskIntoConstraints:NO]; 
    [self.mainView addSubview:view]; 

    NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(view); 

    [self.mainView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|" 
                   options:0 
                   metrics:nil 
                    views:viewsDictionary]]; 

    [self.mainView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view]|" 
                   options:0 
                   metrics:nil 
                    views:viewsDictionary]]; 
    self.currentViewController = controller; 
} 

现在,您可以定义IBOutlets实例并更换您的视图控制器

-(IBAction)showView1:(id)sender 
{ 
    View1Controller * controller = [[View1Controller alloc]init]; 
    [self setMainViewTo:controller]; 
} 
-(IBAction)showView2:(id)sender 
{ 
    View2Controller * controller = [[View2Controller alloc]init]; 
    [self setMainViewTo:controller]; 
}