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为窗口,如果要实现跳转显示另一个窗口需要关闭当前窗口,然后显示下一个窗口

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值