Gos*_*mer 2 macos cocoa objective-c interface-builder
我想NSView在按下按钮时在两个控件之间切换.基本上,我有.xib文件,其中包含NSWindow控件.窗口包含两个子视图和几个按钮.我已经NSViewController在对象列表和NSViewxib中拖了一个.
NSViewController引用了从NSWindowxib文件中浮动的视图和视图.
问题是,如何NSWindow在按下按钮时在nsview1和nsview2之间切换?这是正确的方法吗?

为可交换视图所在的占位符定义NSView插座,以及用于保持对当前正在使用的视图控制器的引用的属性.
@property (assign) IBOutlet NSView* mainView;
@property (strong) NSViewController* currentViewController;
Run Code Online (Sandbox Code Playgroud)
我使用通用方法进行视图交换(使用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;
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以定义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];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1778 次 |
| 最近记录: |