从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的程序开发的更多相关文章
- 从C#到Objective-C,循序渐进学习苹果开发(4)--代码块(block)和错误异常处理的理解
本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本文继续上一篇随笔<从 ...
- 从C#到Objective-C,循序渐进学习苹果开发(3)--分类(category)和协议Protocal的理解
本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本文继续上一篇随笔<从 ...
- 从C#到Objective-C,循序渐进学习苹果开发(2)--Objective-C和C#的差异
本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台开发苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验. 在上篇<从C#到 ...
- 从C#到Objective-C,循序渐进学习苹果开发(1)--准备开发账号和开发环境
本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验,因为一旦方方面面都精通了,也 ...
- 从C#到Objective-C,循序渐进学习苹果开发(7)--使用FMDB对Sqlite数据库进行操作
本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本篇主要开始介绍基于XCod ...
- 从C#到Objective-C,循序渐进学习苹果开发(6)--视图控制器的使用
本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本篇主要开始介绍基于XCod ...
- 【VS开发】循序渐进学习使用WINPCAP(一)
winpcap教程 中文教程 http://www.ferrisxu.com/WinPcap/html/index.html 除此之外, WinPcap · Developer Resources下载 ...
- 【转】布同:如何循序渐进学习Python语言
大家都知道Python语言是一种新兴的编程语言.1989年,Python就由Guido van Rossum发明.Python一直发展态势很好. 原因有几点:1.跨平台性好.Linux.Windows ...
- python学习: 如何循序渐进学习Python语言
大家都知道Python语言是一种新兴的编程语言.1989年,Python就由Guido van Rossum发明.Python一直发展态势很好. 原因有几点:1.跨平台性好.Linux.Windows ...
随机推荐
- 一天一小段js代码(no.2)
(一)可以用下面js代码来检测弹出窗口是否被屏蔽: var blocked = false ; try { /*window.open()方法接受4个参数window.open(要加载的url,窗口目 ...
- [每日电路图] 7、设计一个PCB的流程及细节·总结——给外行的同学或刚入行的同学一个宏观鸟瞰电路板设计的大致流程的文章
前言 最近两天使用AD14软件设计了一个蓝牙防丢器电路板(PCB)图纸,中间有一些细节在本文中记录下,方便下次设计PCB时参考.也希望能给外行的同学或刚入行的同学一个宏观鸟瞰电路板设计的大致流程的文章 ...
- java基础之集合框架
6.集合框架: (1)为什么出现集合类? 面向对象对事物的体现都是以对象的形式,为了方便对多个对象的操作,就对对象进行存储. 集合就是存储对象最常用的一种方式. (2)数组和集合都是容器,两者有何不同 ...
- 360路由器c301最新固件支持万能中继
360路由器c301现在已经停产了.出厂的固件是360_301_0.7.3.8.这个版本不支持中继.5G信号.本文主要介绍如何刷最新固件以及设置万能中继. 本文为作者原创,发表在博客园:http:// ...
- Visual Studio 2012系统环境变量设置(命令行)
方法1.运行脚本vsvars32.bat:D:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\vsvars32.bat ...
- Atitit USRqc62204 证书管理器标准化规范
Atitit USRqc62204 证书管理器标准化规范 /atiplat_cms/src/com/attilax/cert/CertSrv4mv.java /** * */ package com. ...
- atitit.vod search doc.doc 点播系统搜索功能设计文档
atitit.vod search doc.doc 点播系统搜索功能设计文档 按键的enter事件1 Left rig事件1 Up down事件2 key_events.key_search = fu ...
- Atitit 实现java的linq 以及与stream api的比较
Atitit 实现java的linq 以及与stream api的比较 1.1. Linq 和stream api的关系,以及主要优缺点1 1.2. Linq 与stream api的适用场景1 1. ...
- Python装饰器详解
python中的装饰器是一个用得非常多的东西,我们可以把一些特定的方法.通用的方法写成一个个装饰器,这就为调用这些方法提供一个非常大的便利,如此提高我们代码的可读性以及简洁性,以及可扩展性. 在学习p ...
- Javascript学习记录——数组去重
var arr = [1, 2, 3, 5, 5, '45', '45', 4, 1, '1', '2'] for (var i = 0; i < 10000; i++) { arr.push( ...