从C#到Objective-C,循序渐进学习苹果开发(5)--利用XCode来进行IOS的程序开发

本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验。前面几篇随笔主要介绍C#和Objective-C之间的差异,本片开始介绍利用XCode来进行IOS的程序开发,对比和C#利用VS进行开发的差异,以便我们更快的融入到IOS开发的阵营。

在介绍利用XCode来开发项目前,我自己消化了几本IOS开发的书籍,以及苹果开发网站的一些自认为重要文章介绍,学习了一些视频的内容,包括网易里面的斯坦福大学的一些视频,并自己模拟了一些简单的项目代码开发,虽然不能说是已经掌握了相关的IOS开发(其实还差很远),但是也对一些基础的项目应用有了一个大概的了解,结合以前的Winfrom应用开发(很类似),也算有了一些小小的领悟吧。但介绍IOS开发,也是结合自己以前对C#开发的一些经验和理解来介绍,希望不详细,不确切的地方,大家多多指正。

1、根据项目模板创建项目

其实对开发而言,无论是对于使用C#开发的VS开发工具,还是基于Objective-C开发的XCode工具,都有基于模板生成对应的项目,这样我们可以快速生成我们需要的项目框架,这里为了介绍方便,建立一个单视图的应用程序,有点类似于我们创建一个Winform的标准应用程序,里面默认也是带有一个Form窗体的,这个XCode的项目模板也是类似。

 

创建一个项目,我们需要指定项目的名称、类前缀和一些相关的信息,这个和我们创建C#项目指定命名空间以及一些相关参数也有点类似,但不等同,C#里面,对于多个项目应用,我们可以通过命名空间进行区分,但是在IOS里面开发,我们就只能通过类名进行限定了,因此,必要的类名前缀是需要的,这个的类前缀,主要是用来创建项目的视图控制器或者代理类的前缀标识。

创建的项目后的视图如下所示,可以看出红色方框就是前面一个地方的设置。

2、IOS项目和Winform项目开发的差别

创建的项目,默认有一个视图控制器和一个视图代理类,还有一个空白的界面,如下所示。这个和我们在VS里面开发Winform项目很类似,也是需要拖动控件进行界面设计的。

IOS里面也提供了很多相关的控件,作为界面设计的需要,当然除了拖动方式,在Objective C里面也可以通过代码方式创建相关的控件对象,这个和C#创建控件一样,没什么差别。

但是,当我们把控件拖动放到设计面板里面后,发现双击不再是处理响应控件操作的代码了,而是修改控件的标题,这个开发观念和C#里面开发Winform应用不同,这个是因为IOS的开发是严格遵循MVC的设计模式,它的界面设计独立的,界面视图的控制器又有独立的类进行处理,另外,它的一些处理,还可以放到一些代理类里面进行处理(如上图截图里面的应用程序委托类),这个其实有点类似于WPF的方式了,界面可以通过其他工具进行设计开发。

一般来说,我们在XCode中创建一个视图的时候,同时也会创建一个空白的XIB后缀名的视图界面,视图控制器就是管理模型数据(和模型逻辑调用),然后以一定的方式呈现视图内容,也就是说,控制器对模型和视图都有全权的控制处理;而视图如果要通知控制器,一般在IOS里面采用代理的方式或者Target-Action方式进行通信,它的关系可以通过斯坦福教授那个IOS开发介绍的图形进行阐释,如下所示。

我们如果是从事过C#的Winform开发的,或者WebForm的话,那么可能很不习惯,在IOS里面,界面设计和处理代码是分开的,它利用XML来描述界面(XIB文件),另外,对于界面的后台处理,通过视图控制器进行,而每个视图里面,可能还会放置一些子视图,如WebView,TableView等这样的视图,如果需要这些具体的视图操作,那么还需要在视图控制器里面使用视图代理接口,如子视图的绘制和数据源的接口,选择视图某部分等操作,都是通过代理接口进行处理,而对于一些按钮的操作,则是通过Target-Action这样的模式进行响应。反观C#里面的Winform开发,可能不会划分那么复杂,多数是通过事件等方式对数据进行绑定或者按钮事件的响应,要了解IOS的开发模式,可能这里需要特别注意调整的地方。

随着认识的深入,你会慢慢了解这个模式对于界面的设计,代码的维护分别的很清楚,维护很方便。

3、添加一些界面控件和处理

首先,我们和在VS里面开发WInform项目一样,需要先绘制好界面,我们先把界面设计好向如下图形所示,这个工作没有什么特别之处,就是把它拖动到面板上,调整位置和布局即可。

为了好看,我在XCode的项目里面导入了一个图片,然后指定了按钮的背景图片,如下所示。

运行界面,看到的效果和这个差不多,不过如果要在代码里面对界面元素(如文本输入、标签、按钮等)进行处理,目前还不可以,需要增加一个IBOutLet的对象到代码里面,一般可以通过拖动的方式添加。

拖动的方式,就是按着Control拖动界面元素到代码里面,会弹出一个输入界面,输入控件的名称即可,这个变量称之为插座(IBOutlet)变量,如下所示。

 

对于按钮的事件处理,也可以通过这个方式进行添加,如下所示,

 

最后视图实现类的代码如下所示

#import "MyHelloAppViewController.h"

@interface MyHelloAppViewController ()

@property (weak, nonatomic) IBOutlet UITextField *txtName;

@property (weak, nonatomic) IBOutlet UITextField *txtAge;

- (IBAction)getResult:(id)sender;

@end

然后我们在后台代码里面,实现getResult的方法内容,把输入的内容在弹出视图里面进行展示,如下所示。

- (IBAction)getResult:(id)sender
{
    NSLog(@"姓名:%@  年龄:%@",self.txtName.text, self.txtAge.text);

    UIAlertView *message = [[UIAlertView alloc] initWithTitle:self.txtName.text
                                                      message:self.txtAge.text
                                                     delegate:self cancelButtonTitle:@"取消"
                                            otherButtonTitles:@"保存", nil];
    message.alertViewStyle = UIAlertViewStyleDefault;
    [message show];
}

运行界面后,得到的效果如下所示。

4、界面的横向布局

我们知道,一般的IOS应用,可以竖着使用,也可以横着使用,如果界面支持,那么横着的话,也应该看起来很美观才可以,例如IOS里面的浏览器就是很好的例子,横竖总适宜的。

我们上面方式创建的界面,虽然界面元素比较少,但是一旦横着来看,那么它的效果就是固定宽度的了。

如果需要让它们的元素能够根据界面自动调整,就需要设置控件的约束,如下所示。

一旦添加了约束,我们选择输入框后,就会看到几个方向上的一些线条提示,如下所示。

通过指定几个不同方向的约束,就能够很好的控制输入框的大小了,让它可以根据界面的调整而自动进行调整,运行模拟器,得到的界面效果如下所示,输入框的宽度已经能够自动伸缩了。

本文转自博客园伍华聪的博客,原文链接:从C#到Objective-C,循序渐进学习苹果开发(5)--利用XCode来进行IOS的程序开发,如需转载请自行联系原博主。

 

时间: 2017-12-04

从C#到Objective-C,循序渐进学习苹果开发(5)--利用XCode来进行IOS的程序开发的相关文章

从C#到Objective-C,循序渐进学习苹果开发(7)--使用FMDB对Sqlite数据库进行操作

本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本篇主要开始介绍基于XCode进行IOS程序的开发,介绍使用FMDB对Sqlite数据库进行操作,以及对数据库操作类进行抽象设计,以期达到重用.简化.高效开发的目的. 在.NET领域开发了很多年,一般常见的项目都需要操作数据库,包括有Oracle.SqlServer.Mysql.Sqlite.Access等数据库,这些数据库是

从C#到Objective-C,循序渐进学习苹果开发(1)--准备开发账号和开发环境

本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验,因为一旦方方面面都精通了,也就可能没太大的动力继续写这系列的文章了,文章中可能有一些地方说的不对或者不够完善的地方,希望大家多多指正,共同提高. 由于本人起步Objective-C的苹果开发比较晚,但是因为自己有着比较深厚的C#开发背景,因此在很多方面都会和我之前的经验做比较,因此本系列文章对于从C#转向Objective-C

从C#到Objective-C,循序渐进学习苹果开发(2)--Objective-C和C#的差异

本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台开发苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验. 在上篇<从C#到Objective-C,循序渐进学习苹果开发(1)--准备开发账号和开发环境>介绍了一些基本的转换感悟和一些基础的准备工作,还没有正式真实的介绍Objective-C和C#的之前差异,我们知道,从一种环境或者一种语言转换过去另外一种,我们都会做一些对比和理解,这样可以很容易把我们头脑的知识进行对接,在这

从C#到Objective-C,循序渐进学习苹果开发(3)--分类(category)和协议Protocal的理解

本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本文继续上一篇随笔<从C#到Object C,循序渐进学习苹果开发(2)--Objective-C和C#的差异>,继续对比介绍它们两者之间的差异,以便我们从C#阵营过来的人员加深印象,深入了解Objective-C语言的特性.本篇随笔主要针对Objective-C里面的分类(category)和协议Protocal概念的理解

从C#到Objective-C,循序渐进学习苹果开发(4)--代码块(block)和错误异常处理的理解

本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本文继续上一篇随笔<从C#到Objective-C,循序渐进学习苹果开发(3)--分类(category)和协议Protocal的理解>,继续对比介绍它们两者之间的差异,以便我们从C#阵营过来的人员加深印象,深入了解Objective-C语言的特性.本篇随笔主要针对Objective-C里面的代码块(block)和异常处理概

从C#到Objective-C,循序渐进学习苹果开发(6)--视图控制器的使用

本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本篇主要开始介绍基于XCode进行IOS程序的开发,介绍其中视图控制器的理解和使用过程. 1.视图控制器(导航视图控制器和选项卡视图控制器) 我们知道,在.net里面开发Winform程序或者Webform程序,我们只需要绘制一个个界面,然后在后台添加相应的处理,如果设计比较好的话,把业务逻辑.数据库访问等不同的层包装起来,本

苹果发布了免费的 Swift 应用程序开发课程

苹果宣布为社区大学生和高中生推出一套全新的为期一年的 App 开发课程,现在已经上架 iBook 商店.这门课程将向学生们传授使用苹果 Swift 开发应用程序的一些要素. 根据外媒 MacRumors 的报道,苹果公司今日发布了一个新的应用程序开发课程,旨在为那些想要在快速增长的 App 经济中寻求职业发展的学生提供帮助,这个课程可以在 iBooks Store 中免费下载. 这个全年课程名为"应用程序开发与 Swift",它可以向学生们传授使用苹果旗下日益流行的编程语言 Swift

15个快速学习苹果Swift编程语言的入门教程

要说今年最火的编程语言是什么.那就非Swift莫属了.当然最主要还是市场炒的比较热,加上官方Swift教程<The Swift Programming Language>在北航的大三学生发起在github上进行协同翻译获得了很高的人气,短短几天时间内<Swift中文版>第一版就发布.这真是不火不行了. Swift是苹果公司在WWDC2014上发布的全新开发语言.从演示视频及随后在appstore上线的标准文档看来,语法内容混合了OC,JS,Python,语法简单,使用方便,并可与O

美有线电视商康卡斯特CEO:学习苹果好榜样

康卡斯特CEO布莱恩·罗伯茨 北京时间12月17日消息,据国外媒体报道,美国最大的有线服务公司康卡斯特首席执行官布莱恩·罗伯茨在接受采访时表示,康卡斯特在发展的过程中学习苹果的模式,把复杂的产品组合简约化和易用化. 美国最大的媒体公司并非你想像中的那个.康卡斯特公司的收入和市场影响力比迪斯尼.新闻集团.时代华纳的都要高.就连康卡斯特CEO布莱恩·罗伯茨对公司崛起的速度也感到吃惊.康卡斯特由布莱恩·罗伯茨的父亲创立于美国密西西比州图珀洛市,最初只是一家小小的有线电视公司,如今却是NBC环球的主要持