从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的程序开发,如需转载请自行联系原博主。



 

目录
相关文章
|
7月前
|
jenkins Unix 持续交付
个人记录jenkins编译ios过程 xcode是9.4.1
个人记录jenkins编译ios过程 xcode是9.4.1
118 2
|
1月前
|
Java 物联网 C#
C#/.NET/.NET Core学习路线集合,学习不迷路!
C#/.NET/.NET Core学习路线集合,学习不迷路!
|
2月前
|
开发框架 缓存 算法
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
|
7月前
|
C#
C#的基本语法结构学习
【5月更文挑战第17天】C#基础语法包括变量(如`int x = 10`)、常量(`const int MAX_VALUE = 100`)、运算符(如算术和比较运算符)、控制语句(if、for、while等)和函数声明(`int Add(int x, int y) { return x + y; }`)。这些构成C#程序的基本元素。
87 0
|
3月前
|
Linux C# 开发者
Uno Platform 驱动的跨平台应用开发:从零开始的全方位资源指南与定制化学习路径规划,助您轻松上手并精通 C# 与 XAML 编程技巧,打造高效多端一致用户体验的移动与桌面应用程序
【9月更文挑战第8天】Uno Platform 的社区资源与学习路径推荐旨在为初学者和开发者提供全面指南,涵盖官方文档、GitHub 仓库及社区支持,助您掌握使用 C# 和 XAML 创建跨平台原生 UI 的技能。从官网入门教程到进阶技巧,再到活跃社区如 Discord,本指南带领您逐步深入了解 Uno Platform,并提供实用示例代码,帮助您在 Windows、iOS、Android、macOS、Linux 和 WebAssembly 等平台上高效开发。建议先熟悉 C# 和 XAML 基础,然后实践官方教程,研究 GitHub 示例项目,并积极参与社区讨论,不断提升技能。
120 2
|
3月前
|
设计模式 前端开发 Swift
探索iOS开发:Swift与Objective-C的较量
在这篇文章中,我们将深入探讨iOS开发的两大编程语言——Swift与Objective-C。我们将分析这两种语言的特性、优势和局限性,并讨论它们在现代iOS开发中的应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和建议。
70 3
|
4月前
|
测试技术 虚拟化 iOS开发
iOS自动化测试方案(二):Xcode开发者工具构建WDA应用到iphone
这篇文章是iOS自动化测试方案的第二部分,详细介绍了在Xcode开发者工具中构建WebDriverAgent(WDA)应用到iPhone的全过程,包括环境准备、解决构建过程中可能遇到的错误,以及最终成功安装WDA到设备的方法。
243 0
iOS自动化测试方案(二):Xcode开发者工具构建WDA应用到iphone
|
4月前
|
测试技术 开发工具 虚拟化
iOS自动化测试方案(一):MacOS虚拟机保姆级安装Xcode教程
这篇文章提供了一份保姆级的教程,指导如何在MacOS虚拟机上安装Xcode,包括环境准备、基础软件安装以及USB扩展插件的使用,以实现iOS自动化测试方案的第一步。
239 0
iOS自动化测试方案(一):MacOS虚拟机保姆级安装Xcode教程
|
4月前
|
开发工具 iOS开发 容器
【Azure Blob】关闭Blob 匿名访问,iOS Objective-C SDK连接Storage Account报错
【Azure Blob】关闭Blob 匿名访问,iOS Objective-C SDK连接Storage Account报错
|
4月前
|
图形学 数据安全/隐私保护 iOS开发
Unity与IOS⭐Xcode打包,上架TestFlight的完整教程
Unity与IOS⭐Xcode打包,上架TestFlight的完整教程