AppKit之NSViewController

14 阅读1分钟

前言

在自己职业生涯的空档期,就把之前开发中的笔记分享整理出来吧。

1.NSViewController的创建

NSViewController的创建有以下几种方式

1.1 xib创建

let vc = NSViewController.init(nibName:NSNib.Name(rawValue:"cutomController"),bundle:nil)

1.2 storyboard创建

let storyboard = NSStoryboard(name:NSStoryboard.Name(rawValue:"storyboard"),bundle:nil);

let myViewController = storyboard.instantiateController(withIdentifier:NSStroyboard.SceneIdentifier(rawValue:"myVC"))

1.3 纯代码创建

et viewController = NSViewController();

let view = NSView()

viewController.view = view;

2.控制器管理子视图控制器

var parent:NSViewController?//获取父视图控制器

var childViewControllers:[NSViewController]//获取所有子视图控制器

func addChildViewController(_ childViewController:NSViewController)//添加子视图控制器

func removeFromParentViewController()//从父视图移除自己

### 3.控制器之间的切换
控制器之间的切换有一下几种方式
#### 3.1 model切换
当前模态出来的控制器没有被释放,上一个控制器界面用户是无法交互的,调用的函数如下:

func presentViewControllerAsSheet(_ viewController:NSViewController);

#### 3.2 sheet切换
从控制器顶部向下显示
func presentViewControllerAsSheet(_ viewController:NSViewController);
#### 3.3 Popover切换
func presentViewController(_ viewController:NSViewController,asPopoverRelativeTo:positioningRect:NSRect,of positioningView:NSView,preferredEdge:NSRectEdge,behavior:NSPopoverBehavior);
#### 3.4 自定义动画方式

func presentViewController(viewController:NSViewController,animator:NSViewControllerPresentationAnimator)

3.5 转场切换

from,to的控制器父控制器必须拥有同一个控制器,所以先addChildViewControllers:

func transition(from:NSViewController,to:NSViewController,options:NSViewController.TransitionOptions,completionHandler:)

### 4.释放控制器

func dismissViewController(_viewController:NSViewController);