由于主做移动端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启动视图程序踩坑相关推荐

  1. 使用main方法启动spring程序

    使用main方法启动spring程序 在 spring 框架中,由于对象都交给了 IoC 容器进行管理,那么直接在 main 方法中创建 service 层对象,就会出现空指针异常(NPE) 正确的方 ...

  2. 2021-08-21-智能/百度小程序踩坑

    智能小程序/百度小程序踩坑-客服功能 1.智能小程序接入客服服务非常简单,但是我第一次搞客服功能认为就跟h5一样直接引入第三方的服务,然后使用调用js文件就可以了,但是,在小程序中只能使用官方提供的客 ...

  3. android小程序_小程序踩坑记

    小程序踩坑记 希望这个文章能尽量记录下小程序的那些坑,避免开发者们浪费自己的生命来定位到底是自己代码导致的还是啥神秘的字节跳变原因. 前记 小程序大多数坑是同一套代码在不同平台上表现不一致导致的,微信 ...

  4. tabbar角标 小程序_【沃行课堂】恭喜你遇到“坑”,小程序踩坑指南

    上周我们的开发小哥哥带领我们一起领略了开发中遇到的各种问题,以及基于SaaS模式的平台技术架构及实现.本周我们换个方向,由高级开发工程师秋哥带领大家共同探讨下小程序开发中踩过的坑.秋哥会从公司的几个小 ...

  5. 微信小程序踩坑记——ColorUI组件的使用

    微信小程序踩坑记--组件的使用 组件类型 ColorUI Vant weapp ColorUI 首先贴上官网链接:官网链接,GitHub链接 简介 ColorUI是一个css库!!!在你引入样式后可以 ...

  6. 微信小程序踩坑—用户登录界面

    最近做的一个项目有涉及到用户登录.微信小程序的用户登录在我看来有两种,一种是需要用微信提供的用户身份标识,简单地说就是小程序的登录者就是使用这个小程序的微信用户,还有一种是小程序和服务器之间有自己的一 ...

  7. 小程序踩坑日志(一)

    微信小程序踩坑日志 起步 申请账号 查看AppID-"设置"-开发设置 小程序的appid相当于小程序平台的一个身份验证 安装开发者工具https://mp.weixin.qq.c ...

  8. 微信小程序踩坑日记-微信小程序首次加载样式错乱问题

    微信小程序踩坑日记-微信小程序首次加载样式错乱问题 在实际开发项目中,遇到了个棘手的问题,就是在某些因素下,进入小程序发现有些样式发生偏移.错乱等问题 问题原因:-未知(估计是组件的问题) ↓ 解决办 ...

  9. osx php7 imagick,[PHP] MacOS 自带php环境安装imagick扩展踩坑记录 | 码农部落

    前言 最近学习yii2,在搭建环境后,发现在访问contact页面时报错,如下: "Either GD PHP extension with FreeType support or Imag ...

最新文章

  1. torch.roll
  2. 浅谈C#更改令牌ChangeToken
  3. c++编码风格指南_100%正确编码样式指南
  4. 优酷《追光吧!》正式开播 风度、实力成关键词
  5. canvas 绘制直线 并选中_在画布中使用路径-Canvas的基本操作
  6. python监控网页内容变化_使用Python监控文件内容变化代码实例
  7. 微信公众号数据2019_如何制作微信公众号图文素材 微信公众号采集器好用吗
  8. 程序员操作系统推荐_程序员的这些问题,竟然在工作后才发现!
  9. vue-cli webpack浅析
  10. Mysql mysqld_safe启动与myslqd启动坑
  11. iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载+使用输出流代替文件句柄...
  12. 卡巴斯基7.0如何设置授权文件
  13. (三十八)论文阅读 | 目标检测之CPN
  14. 矢量组合图标文件格式设计
  15. 美国卡内基梅隆大学计算机排名,卡内基梅隆大学,美国卡梅基梅隆大学世界排名?...
  16. java拨号上网,Android实现pppoe拨号上网(二)具体步骤
  17. 计算机组装与系统安装实验目的,计算机原理与系统组装实验
  18. 7.Mapping详解
  19. 购物网站的html5页面,网购商城(html5页面设计)
  20. 可可网络验证9.3、9.5版本

热门文章

  1. MGRE结合OSPF
  2. csapp第一章 计算机系统漫游 学习和理解
  3. BUUCTF | [INSHack2017]sanity | [INSHack2019]INSAnity | [INSHack2019]Sanity | [INSHack2017]insanity-
  4. 关闭搜狐微门户弹窗终极方法
  5. qq满屏飞吻代码_[爱情][飞吻][跳跳][爱心][嘴唇][玫瑰][月亮][礼物][拥抱]什么意思...
  6. 夯实第一超市地位 京东超市成超10大品类超50家品牌线上最大渠道
  7. 公务员面试七大忌讳(1)
  8. python更新_python 升级版本
  9. oracle vbo4582,4582是什么意思
  10. 华为R5和linux版什么区别,荣耀MagicBook 15锐龙版r5第三方Linux版怎么样?上手跑分评测...