当前位置:首页 > 移动端 > 从C#到Objective-C,循序渐进学习苹果开发(5)--利用XCode来进行IOS的程序开发

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

2022年08月04日 23:26:04移动端9

本随笔系列主要介绍从一个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#到Objective-C,循序渐进学习苹果开发(5)--利用XCode来进行IOS的程序开发 _ JavaClub全栈架构师技术笔记

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

从C#到Objective-C,循序渐进学习苹果开发(5)--利用XCode来进行IOS的程序开发 _ JavaClub全栈架构师技术笔记

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

从C#到Objective-C,循序渐进学习苹果开发(5)--利用XCode来进行IOS的程序开发 _ JavaClub全栈架构师技术笔记

 

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

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

从C#到Objective-C,循序渐进学习苹果开发(5)--利用XCode来进行IOS的程序开发 _ JavaClub全栈架构师技术笔记

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

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

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

从C#到Objective-C,循序渐进学习苹果开发(5)--利用XCode来进行IOS的程序开发 _ JavaClub全栈架构师技术笔记

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

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

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

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

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

从C#到Objective-C,循序渐进学习苹果开发(5)--利用XCode来进行IOS的程序开发 _ JavaClub全栈架构师技术笔记

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

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

从C#到Objective-C,循序渐进学习苹果开发(5)--利用XCode来进行IOS的程序开发 _ JavaClub全栈架构师技术笔记

 

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

从C#到Objective-C,循序渐进学习苹果开发(5)--利用XCode来进行IOS的程序开发 _ JavaClub全栈架构师技术笔记

 

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

#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];
}

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

从C#到Objective-C,循序渐进学习苹果开发(5)--利用XCode来进行IOS的程序开发 _ JavaClub全栈架构师技术笔记

4、界面的横向布局

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

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

从C#到Objective-C,循序渐进学习苹果开发(5)--利用XCode来进行IOS的程序开发 _ JavaClub全栈架构师技术笔记

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

从C#到Objective-C,循序渐进学习苹果开发(5)--利用XCode来进行IOS的程序开发 _ JavaClub全栈架构师技术笔记

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

从C#到Objective-C,循序渐进学习苹果开发(5)--利用XCode来进行IOS的程序开发 _ JavaClub全栈架构师技术笔记

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

从C#到Objective-C,循序渐进学习苹果开发(5)--利用XCode来进行IOS的程序开发 _ JavaClub全栈架构师技术笔记

 

来源链接:https://www.cnblogs.com/wuhuacong/p/3624530.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/mobile/17064.html

标签: iOS
分享给朋友:

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

uniapp IOS从打包到上架流程(详细简单)

uniapp IOS从打包到上架流程(详细简单)

打包流程 一.生成p12证书(先做标明小编是满足了mac和苹果手机系统ios14.1及以上的情况在申请) 首先你要加入苹果的开发者计划:  在这个​​​​​​地址去注册苹果账号:https://developer.apple.com/programs/...

如何在MacOS上创建第一个iOS Flutter应用

如何在MacOS上创建第一个iOS Flutter应用

文章目录 1.安装Flutter 2.设置iOS模拟器 3.在Flutter中创建一个Hello World应用 Google于2018年12月4日发布了Flutter 1.0,...

flutter 在windows和linux上运行IOS UI模拟器

之前发视频总是有人留言,我用的什么模拟器,今天给大家说一下 我一般用的是device_preview这个插件,这个插件的闲置是只能做UI上的模拟,并没有真正的运行环境。 近似您的应用程序在另一台设备上的外观和性能。 插件名称 device_p...

Flutter设置App的应用名字和应用logo图标的方法(android ios web)

Flutter设置App的应用名字和应用logo图标的方法(android ios web)

在前面的几期给大家介绍了flutter的安装以及一些简单的配置,还运行了helloword 那么接下来就带领大家了解如何设置应用名称以及图标 Flutter设置App的应用名字和应用logo图标的方法, 知识点虽然简单,但是不知道这个知...

IOS开发之新浪围脖

IOS开发之新浪围脖

  IOS开发和Web开发一样,网络请求方式包括Get和Post方式。Get和Post两者有和特点和区别,在本篇博客中不做过多的论述,本篇的重点在于如何GET数据和POST数据。下面还会提到如何在我们的项目中使用CocoaPods, CocoaPods的安装和使用教程请参考链接http...

iOS-Runtime知识点整理

iOS-Runtime知识点整理

runtime的5个核心用法:1.获取属性列表2.交换方法实现3.关联对象4.拦截未实现的方法、动态添加实现5.动态创建一个类 本文目录 1.Runtime简介 2.Runtime相关的头文件 3.技术点和应用场...

iOS开发支付篇——内购(IAP)详解

iOS开发支付篇——内购(IAP)详解

内购所需要的资料整理总结,史上最完整的,哈哈哈哈哈哈 思维导图 重点总结: 1.获取内购列表(从App内读取或从自己服务器读取) 2.App Store请求可用的内购列表 3.向用户展示内购列表 4.用户选择了...

iOS可视化动态绘制八种排序过程(Swift版)

iOS可视化动态绘制八种排序过程(Swift版)

前面几篇博客都是关于排序的,在之前陆陆续续发布的博客中,我们先后介绍了冒泡排序、选择排序、插入排序、希尔排序、堆排序、归并排序以及快速排序。俗话说的好,做事儿要善始善终,本篇博客就算是对之前那几篇博客的总结了。而本篇博客的示例Demo也是在之前那些博客Demo的基础上做的,也算是集成了...

iOS开发之再探多线程编程(GCD):Grand Central Dispatch详解

iOS开发之再探多线程编程(GCD):Grand Central Dispatch详解

Swift3.0相关代码已在github上更新。之前关于iOS开发多线程的内容发布过一篇博客,其中介绍了NSThread、操作队列以及GCD,介绍的不够深入。今天就以GCD为主题来全面的总结一下GCD的使用方式。GCD的历史以及好处在此就不做过多的赘述了。本篇博客会通过一系列的实例来好...

iOS开发之微信聊天工具栏的封装

iOS开发之微信聊天工具栏的封装

之前山寨了一个新浪微博(iOS开发之山寨版新浪微博小结),这几天就山寨个微信吧。之前已经把微信的视图结构简单的拖了一下(iOS开发之微信山寨版),今天就开始给微信加上具体的实现功能,那么就先从微信的聊天界面开始吧。提到封装是少不了写代码的,在封装组件的时候,为了组件的可移植性,我们就不...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。