MacOS-MacAPP使用Main.storyboard启动视图程序踩坑
Posted MinggeQingchun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MacOS-MacAPP使用Main.storyboard启动视图程序踩坑相关的知识,希望对你有一定的参考价值。
由于主做移动端APP的ios开发,对于Mac端的APP开发较少,我也本以为,简单的以为会和iOS差不多
雄赳赳,气昂昂
没想到啊,真是没想到啊,帅不过3秒!!!尴尬!!!
在程序视图启动入口处就挂了,踩了一些坑,创建macOS项目步骤我就不再介绍了,可参考博文
本人使用OC创建的macOS项目,勾选了storyboard,创建好项目之后,界面如下:
在可视化编辑器中看到的东西。有三个主要区域,每个在 Document Outline 中也有相应的文本表示:
- Application Scene:菜单栏和项目。
- Window Controller Scene:配置窗口行为。
- View Controller Scene:UI 元素所在的地方
一、坑一:删除ViewController自定义Controller,运行APP还是空白window
默认有ViewController.h和ViewController.m以及Main.storyboard文件,看storyboard视图区域会发现程序入口AppDelegate默认指向WindowController,WindowController指向ViewController,最终展示的是ViewController上的视图,可参考看上图,也可通过运行APP查看图层也可验证
博主习惯性的删除了ViewController文件,然后自己创建了自定义MainViewController,并在上面添加了一些UI,发现启动APP还是展示以前的空白window,虽然删除了ViewController文件,但其实指向还是指向ViewController,因此我们需要改变指向,如下:
通过最右边的inspector面板区域Identity选项;Identity: 如果控件使用自定义的类,需要从Class下拉列表中选择
选中自定义的MainViewController,这时Main.storyboard的UI就和controller关联起来了,在运行就是展示MainViewController上的视图
二、坑二:Main.storyboard中Window关联不了AppDelegate
我想在AppDelegate中关联上Main.storyboard中的主Window,发现怎么都关联不上,查看storyboard区域视图发现其window指向WindowController的
指向也可看出其关联类
三、坑三:删除Main.storyboard,使用自定义创建的XIB文件
删除了Main.storyboard文件之后,运行直接报错'Could not find a storyboard named 'Main' in bundle NSBundle;只好将其还原回去
因为在项目中指定了 程序启动视图主界面为Main.storyboard;我们可以自定义一个MainMenu.xib文件,在General----Deployment Info----Main Interface,指定MainMenu.xib;这时在运行就会发现程序启动主界面就是MainMenu.xib上的UI
这个时候我们就可以将Window关联上AppDelegate了;其界面和Main.storyboard相比就没那么丰富了,就单纯的查看自己界面属性
这个时候不管我们使用Main.storyboard还是自定义的MainMenu.xib文件加载主界面都是可以的
通过Main.storyboard初始化界面,加载主界面
通过自定义MainMenu.xib文件初始化界面,加载主界面
综上,也总结了一下MacOS开发和iOS开发的一些区别:
具体区别也可参考博文MacOS-MAC 开发和IOS开发不同之处(纯代码)
MacOS开发常用的控制器为NSWindowController,而不是iOS里面的ViewController,因为mac app大多数为多窗口,而iOS app上只有一个主窗口,更多数的情况下我们是在ViewController做操作,显示各个不同的页面,而且UI控件大部分以UI开头,而MacOS开发刚好相反,UI控件基本上Main.storyboard是以NS开头,每个NSWindowController 的xib都包含一个NSWindow和一个NSView。
由于MacOS开发学习资料较少,目前就在网上下载的很多demo来看,发现大部分都用的是xib,使用storyboard的都比较少,除了少部分的纯代码手写除外!
MacOS开发的坐标系也与iOS开发的坐标系不同,MacOS开发的坐标系的原点在XY坐标系的左下角,而iOS开发的坐标系的原点是在XY坐标系的左上角开始的。当然了,你要是不习惯的话可以强制性修改它的坐标系,如:通过覆盖视图的isFlipped方法,强制视图坐标系原点为左上角位置.
方法名称为:- (BOOL)isFlipped{return YES;} 一般声明某个控件在窗口的位置用NSMakeRect(0, 0, 110, 110)或者CGRectMake(0, 0, 110, 110)中;
在MacOS 开发中视图本身没有提供背景颜色,边框,圆角等属性。但是可以利用layer属性来控制这些效果,使用这些属性之前必须设置其属性wantsLayer为YES。这一点就相对于没有iOS开发要方便的多,当然还可以通过重绘的方法来实现这些效果- (void)drawRect:(NSRect)dirtyRect
在MacOS开发中一般以NSWindow为窗口,如果要实现跳转显示另一个窗口需要关闭当前窗口,然后显示下一个窗口
以上是关于MacOS-MacAPP使用Main.storyboard启动视图程序踩坑的主要内容,如果未能解决你的问题,请参考以下文章