从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里面的浏览器就是很好的例子,横竖总适宜的。
我们上面方式创建的界面,虽然界面元素比较少,但是一旦横着来看,那么它的效果就是固定宽度的了。



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



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

通过指定几个不同方向的约束,就能够很好的控制输入框的大小了,让它可以根据界面的调整而自动进行调整,运行模拟器,得到的界面效果如下所示,输入框的宽度已经能够自动伸缩了。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,519评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,842评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,544评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,742评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,646评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,027评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,169评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,324评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,268评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,299评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,996评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,591评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,911评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,288评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,871评论 2 341

推荐阅读更多精彩内容