2

NSViewボタンを押すと、2 つのコントロールを切り替えたいと思います。基本的に、コントロールを含む .xib ファイルがありますNSWindow。ウィンドウには 2 つのサブビューといくつかのボタンが含まれています。オブジェクト リストをドラッグNSViewControllerし、もう 1 つNSViewを xib にドラッグしました。 NSViewControllerビューからの参照とNSWindowxibファイルにフローティングしているビューがあります。

質問は、ボタンを押したときに nsview1 と nsview2 を切り替えるにはどうすればよいNSWindowですか? これは正しい方法ですか?

スケッチ

4

1 に答える 1

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 を定義して、View Controller をインスタンス化し、交換できるようになりました。

-(IBAction)showView1:(id)sender
{
    View1Controller * controller = [[View1Controller alloc]init];
    [self setMainViewTo:controller];
}
-(IBAction)showView2:(id)sender
{
    View2Controller * controller = [[View2Controller alloc]init];
    [self setMainViewTo:controller];
}
于 2013-03-26T21:50:52.577 に答える