对比学习UIKit和AppKit -- ViewController

在iOS中ViewController的基类是UIViewController;Mac中ViewController的基类是NSViewController。

Mac中ViewController父类是NSViewController,子类很少,笔者就查到了NSPageController。如果应用中需要,可以Customize。

iOS中有好多个ViewController,在Ref2中有介绍,其父类是UIViewController,子类包括UINavigationController、UITabBarController、UIPageViewController等。也可以Customize。

在应用中如何使用ViewController呢?还有Window、WindowController之间都是什么关系呢?
下面先说说流水账。

1. 在Mac上创建一个Window,我们需要指定这个Window的File‘s Owner,这个File’s
Owner需要是一个WindowController的子类;而iOS上不会创建一个Window,也不需要WindowController,因为iOS上的Window非常简单,它不需要title
bars, close boxes, or any other visual adornments;

2. 不论在iOS上还是Mac上,如果我们需要在xib文件中创建一个view时,需要指定这个View的File‘s
Owner,这个File’s
Owner需要是一个ViewController的子类;或者时UIViewController或者时NSViewController;

3. 在Mac上,创建一个view
的xib文件后,会有一个Application的Placeholder对象出现在IB中,如同其所在的category说的一样,它是一个Placeholder,<TBD>;

4.
在Mac上创建一个Window的xib文件后,跟创建view时不一样的地方在于,Window的xib中有一个栏目时Object,和PlaceHolder时并列的,Mac和iOS上创建View的xib文件时就没有,这个源于Window与view的不同。先看Xcode给默认加入的三个对象:Main
Menu、App Delegate和Font
Manager。这个话题需要另开新帖。<TBD>;

5.
在Mac和iOS上开发的不同在于,Mac上偏重Window,View次之,而iOS上可以说时99%是View。比如我们要显示一个Image+一段文字描述,在Mac上通常可以在一个Window上拉进两个View,一个ImageView,一个TextField
view,然后由WindowController来处理,当然也可以创建一个customized
的view,这个view包括一个ImageView,一个TextField view,然后配上一个custom view
controller;而iOS上搞一个root
view,然后像Mac上那样搞也可以,但是如果一个应用的页面多了,管理起来就麻烦了,一个页面显示Image,另外一个页面就是tab
view了,难道把之前的全删掉,然后加新的,或者新搞一个window,然后替换当前的window?都不太自然,即使能实现,成本也高了很多。所以最好的方式就是创建一个自定义的view,然后加一个custom
viewcontroller。

6. ViewController干了什么,什么情况下需要customize view controller?
view
controller是UI设计MVC模式中的C,对于iOS上的UIViewcontroller,我写过一篇博文,没深入挖掘什么,就是读了一下Apple的文档,乱写的,概括来说,有这么几个功能:View
Management,rotation management等。而Mac上的NSViewController最主要的就是view
management。显著的区别就是iOS需要管理view的什么周期,并把若干callback函数暴露出来,让developer来定制在什么时候干什么事,比如在ViewWillAppear中可以设置status
bar的方向和样式以使status bar和要显示的view风格一致等等。什么时候需要customized
viewcontroller?这个对于Mac和iOS是通用的,如果定制了View,就需要定制的viewcontroller,因为view
controller需要管理这个view,对这个view中每个button如何显示,点击后反应是什么,awakeFromnib怎样实现都得提供支持。

7.
问题回到最初,为什么iOS上有那么多UIViewController的子类,而Mac上却少有NSViewController的子类呢?iOS上view的显示空间小,要高效地显示往往总要采取那几种方式,Apple提取了若干种非常常用的view,对其提供了UIViewController的子类帮助开发者直接使用,从而缩短开发时间。而Mac上有足够的空间,开发者可以随便搞,很难抽取共同的模式,即便少,但还是有NSPageController来提供显示多页时使用,如果你的应用中有这种固定模式,你可以提供一个给整个应用来用。

对比学习UIKit和AppKit -- ViewController,布布扣,bubuko.com

时间: 2024-08-26 16:45:29

对比学习UIKit和AppKit -- ViewController的相关文章

对比学习UIKit和AppKit--入门级

UIKit是用来开发iOS的应用的,AppKit是用来开发Mac应用的,在使用过程中他们很相似,可是又有很多不同之处,通过对比分析它们的几个核心对象,可以避免混淆. UIKit和AppKit都有一个Application类,每个应用都只创建一个Application对象,分别是UIAplication和NSApplication的实例.但是创建这个对象的方式还是稍有不同,看iOS应用的main函数: ? 1 2 3 4 5 6 int main(int argc, char * argv[])

[转] Java程序员学C#基本语法两个小时搞定(对比学习)

Java程序员学C#基本语法两个小时搞定(对比学习) 对于学习一门新的语言,关键是学习新语言和以前掌握的语言的区别,但是也不要让以前语言的东西,固定了自己的思维模式,多看一下新的语言的编程思想. 1.引包 using System;java用import2.构造函数和java语法相同3.析构函数  变量和类的对象都有生命周期,生命周期结束,这些变量和对象就要被撤销.  类的对象被撤销时,将自动调用析构函数.一些善后工作可放在析构函数中完成.  析构函数的名字为~类名,无返回类型,也无参数.Per

C#与Java对比学习:类型判断、类与接口继承、代码规范与编码习惯、常量定义(转载)

C#与Java对比学习:类型判断.类与接口继承.代码规范与编码习惯.常量定义 类型判断符号: C#:object a;  if(a is int) { }  用 is 符号判断 Java:object a; if(a instanceof Integer) { } 用 instanceof 符号判断 类与接口的继承: C#:public class MDataRow : List<MDataCell>, IDataRecord, ICustomTypeDescriptor Java:publi

深入浅出MongoDB(五)mongo语法和mysql语法对比学习

我们总是在对比中看到自己的优点和缺点,对于mongodb来说也是一样,对比学习让我们尽快的掌握关于mongodb的基础知识. mongodb与mysql命令对比 关系型数据库一般是由数据库(database).表(table).记录(record)三个层次概念组成.而非关系型数据库mongodb是由数据库(database).集合(collection).文档对象(document)三个层次组成.mongodb对于关系型数据库里的表,没有行和列的关系概念,这体现了模式的自由特点. 语法命令如下列

OC和C对比学习

1.已有C的基础,如何快速入门OC? 1)源文件对比 思考&实现1: 1)在C语言中,我们遇到不同后缀的文件有哪些? .c .o .out .h 扩展名 .h 头文件 .c c语言原文件 .cpp .cc C++语言的原文件 .m Objective-C的原文件 .mm Objective-C++的原文件 OC中常见的两种文件:.m 文件和.h文件 扩展名 原类型 .h        头文件,头文件包含的方法,属性的声明 .m        类的实现文件,参与便衣的文件,用来实现类中的声明的方法

Java程序员学C#基本语法两个小时搞定(对比学习)

对于学习一门新的语言,关键是学习新语言和以前掌握的语言的区别,但是也不要让以前语言的东西,固定了自己的思维模式,多看一下新的语言的编程思想. 1.引包 using System;java用import2.构造函数和java语法相同3.析构函数  变量和类的对象都有生命周期,生命周期结束,这些变量和对象就要被撤销.  类的对象被撤销时,将自动调用析构函数.一些善后工作可放在析构函数中完成.  析构函数的名字为~类名,无返回类型,也无参数.Person类的析构函数为~ Person().  C#中类

[Swift学习]UIKit学习之滑块控件UISlider的用法

UIKit学习之滑块控件UISlider的用法 Slider: Sliders enable users to interactively modify some adjustable value in an app, such as speaker volume or screen brightness. UISlider: A UISlider object is a visual control used to select a single value from a continuous

思科和华为交换机常用命令之对比学习

思科和华为交换机应该是网络项目中大家接触比较多的了,这两种交换机的常用 命令各有不同,本文结合网络项目中两种交换机的常用命令从对比的角度帮助大家来学习. 一. Switch#show  run 显示所有配置命令 Switch#show   ip   inter   brief   显示所有接口状态 Switch#show vlan  brief   显示所有VLAN的信息 Switch#show   version   显示版本信息 [Quidway]dis cur 显示所有配置命令 [Quid

【对比学习】koa.js、Gin与asp.net core——中间件

web框架中间件对比 编程语言都有所不同,各个语言解决同一类问题而设计的框架,确有共通之处,毕竟是解决同一类问题,面临的挑战大致相同,比如身份验证,api授权等等,鄙人对node.js,golang,.net core有所涉猎,对各自的web框架进行学习的过程中发现了确实有相似之处.下面即对node.js的koa.golang的gin与.net core的asp.net core三种不同的web后端框架的中间件做一个分析对比 Node-Koa.js 应用级中间件 //如果不写next,就不会向下