Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 添加新的视图控制器并在cocoa应用程序中推送它_Objective C_Macos_Nswindowcontroller_Nsviewcontroller - Fatal编程技术网

Objective c 添加新的视图控制器并在cocoa应用程序中推送它

Objective c 添加新的视图控制器并在cocoa应用程序中推送它,objective-c,macos,nswindowcontroller,nsviewcontroller,Objective C,Macos,Nswindowcontroller,Nsviewcontroller,我不熟悉OSX应用程序。在iOS中有如下方法: 1. self.window.rootViewController = self.viewController; 2. [self.window addSubview:self.viewController.view]; 在窗口或中添加视图控制器的步骤 3. DefaultViewController *objDefault = [[DefaultViewController alloc] initWithNibName:@"DefaultVie

我不熟悉OSX应用程序。在iOS中有如下方法:

1. self.window.rootViewController = self.viewController;
2. [self.window addSubview:self.viewController.view];
在窗口或中添加视图控制器的步骤

3. DefaultViewController *objDefault = [[DefaultViewController alloc] initWithNibName:@"DefaultViewController" bundle:nil];
   [self.navigationController pushViewController:objDefault animated:TRUE];
4. DefaultViewController *objDefault = [[DefaultViewController alloc] initWithNibName:@"DefaultViewController" bundle:nil];
   [self presentViewController: objDefault animated:TRUE completion:nil];
按下下一个视图控制器


我的问题是,在OSX中,有没有像上面那样的方法可以将新的视图控制器添加到窗口或推上下一个视图控制器?

Cocoa
Cocoa touch
有一些不同的方法来更改窗口上的视图。 要更改视图,您需要以编程方式删除旧的子视图并添加新的子视图

- (void)addNewSubview:(NSView *)view // NSWindowController subclass implementation file
{
  [_subview removeFromSuperview];
  NSView *contentView = (NSView *)self.contentView;
  [contentView addSubview:view];
  _subview = view;
}
或者简单的
[contentView replaceSubview:_subviewwith:view]

从OSX10.10开始,就有机会在iOS中使用类似的东西

UPD

要从application delegate类唤醒窗口,请创建NSWindowController子类实例并显示窗口(这与iOS“故事板时代之前”的情况基本相同)


如果使用故事板和分段显示新的NSViewController,则可能需要关闭旧的视图控制器。我是这样做的:

- (void)prepareForSegue:(NSStoryboardSegue *)segue sender:(id)sender
{
    [self.view.window close];
}

每个视图控制器本身都会创建一个窗口,因此在显示新窗口之前,您需要关闭旧窗口。

我有NSViewController的子类,我想将此子类添加到
-(void)applicationdFinishLaunching:(NSNotification*)aNotification
中。那么如何实现呢。。?
- (void)prepareForSegue:(NSStoryboardSegue *)segue sender:(id)sender
{
    [self.view.window close];
}