MacOS-MacAPP使用Main.storyboard启动视图程序踩坑_mac中application加载viewcontroller-程序员宅基地

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

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/MinggeQingchun/article/details/116273771

智能推荐

面向切面编程实现Nestjs接口Api数据缓存_nestjs 缓存接口数据-程序员宅基地

文章浏览阅读1.1k次。一、业务场景在后端接口开发过程中,我们经常会谈论的话题,提高接口响应速度,前端接口调用后端接口响应时间的缩短,我们抛开数据库设计及后端代码的业务逻辑等问题。我们经常会听到说用redis做数据缓存,直接从内存中获取数据返回给客户端,减少后端程序对数据库的操作,提高接口的性能。使用方式1、侵入式的方式,在需要缓存的接口代码里面不停的复制黏贴,将数据缓存到redis中,哪天如果不需要缓存了,又要去代码里面查找,删除2、采用面向切面编程的思想,使用装饰器(注解)的方式,在需要缓存的接口上加上注解的方式,re_nestjs 缓存接口数据

王者荣耀服务器维护到几点,王者荣耀维护到几点?6.23维护时间介绍[多图]-程序员宅基地

文章浏览阅读1.1k次。王者荣耀6月23日要维护多久才能玩?昨天新赛季就已经在更新了,晚上23:30就开始停机维护,一直到现在还在维护中,在此期间玩家是进不去游戏的,具体维护的时间114小编会在下方的攻略中为玩家们提供,各位都一起来了解下吧。王者荣耀6.23维护时间介绍抢先服:2021年6月22日23:30-6月23日9:30停机更新(6月22日23:00禁止进入PVP和人机对战)正式服:2021年6月22日23:30-..._王者抢先服维护到什么时候

数字孪生|交通运输可视化系统_数据可视化在交通运输领域的应用-程序员宅基地

文章浏览阅读1.9k次。智慧交通的发展,得益于现代物联网、云计算、大数据、移动互联网等新一代信息技术的快速发展,为智慧交通提供了强大的技术支撑。_数据可视化在交通运输领域的应用

洛谷题解P1022 计算器的改良_问题 m: 计算器的改良c++-程序员宅基地

文章浏览阅读360次。一、题目https://www.luogu.org/problemnew/show/P1022二、代码#include<bits/stdc++.h>using namespace std;int main(){ int coe = 0; // coe * x = value, coe即为x的系数 int value = 0; int..._问题 m: 计算器的改良c++

html标记 字体标记_html语言中,标题字体的标记是(-程序员宅基地

文章浏览阅读78次。======================================================注:重要!程序员如何有效的放松身心!下班后做什么?======================================================html的字体标记分为实体标记和逻辑标记两种,两者有以下不同:a)实体标记有固定的显示效果,逻辑标记则根据不同的浏_html语言中,标题字体的标记是(

Allegro 16.6快捷键设置_allegro16.6快捷键-程序员宅基地

文章浏览阅读2.1k次。C:\Cadence\Cadence_SPB_16.6-2015\share\pcb\text路径下的env文件,用记事本打开,找到# example of a funckey to emulate Layout capability# The "-cursor" option can be added to any Allegro command with the pick familty# and we utilize the position under the cursor when t_allegro16.6快捷键

随便推点

Ubuntu 16.04下安装CUDA8.0+Cudnn+Caffe_ubuntu本地安装cudnn8.0-程序员宅基地

文章浏览阅读1.3k次。参考http://www.linuxidc.com/Linux/2017-11/148629.htm http://blog.csdn.net/yaningli/article/details/77089696 首先卸载1.cuda9.0卸载切换到安装目录执行 cd /usr/local/cuda-9.0/bin/ lssudo ./uninstall_cuda_9.0.pl2.cuda8._ubuntu本地安装cudnn8.0

i.MX6 交叉编译opencv3.4.1_ld: ../../lib/libopencv_imgcodecs.so.3.4.1: undefi-程序员宅基地

文章浏览阅读2.7k次,点赞2次,收藏11次。环境:PC操作系统:Ubuntu 16.04 LTS交叉编译工具:Poky 1.7.0cmake:3.13.2cmake-gui:3.13.2准备工作:一、下载opencv3.4.1源码:opencv-3.4.1.zip二、创建工作目录及解压:buildopencv — 总目录buildopencv/build — 配置生成makefile的目录buildopencv/..._ld: ../../lib/libopencv_imgcodecs.so.3.4.1: undefined reference to `png_init

matlab信号仿真模型,基于MATLAB的UWB信号仿真模型-程序员宅基地

文章浏览阅读1.9k次。!"#$! !""#$"%$!& %&’(! !"#$%&’()*+,-.!-./0"# ’""($")" )*+,! 12!)&%*$"#3#45678#9*:;?>@ABCD+ ! " # $ % & E ’ $ F ,-./012 -3 4-415 .0567/859: ;410<=4-. G )> HG # I !""# J )! ..._matlab 生成uwb信号

CentOS 7中安装配置JDK 1.7-程序员宅基地

文章浏览阅读432次。前言简单记录一下在CentOS 7中安装配置JDK 1.7的全过程~下载首先是jdk 1.7 64bit &amp; 32bit的下载地址:jdk-7u79-linux-x64.tar.gz (http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.tar.gz) jdk-7u79-linux...

GAN的理解与TensorFlow的实现 谷磊_gan的tensorflow实现-程序员宅基地

文章浏览阅读2.4k次。对应的github:https://github.com/burness/tensorflow-101近年来,基于数据而习得“特征”的深度学习技术受到狂热追捧,而其中GAN模型训练方法更加具有激进意味:它生成数据本身。GAN是“生成对抗网络”(Generative Adversarial Networks)的简称,由2014年还在蒙特利尔读博士的Ian Goodfellow引入深度学习领域。201..._gan的tensorflow实现

总结ctf中 MD5 绕过的一些思路_ctf md5-程序员宅基地

文章浏览阅读1.1w次,点赞28次,收藏118次。总结ctf中 MD5 绕过的一些思路,包括在PHP弱类型比较中 0e 、数组、MD5后的值等于原值,以及强比较的MD5碰撞_ctf md5

推荐文章

热门文章

相关标签