iOS-马上着手开发iOS应用应用程序-第二部分构建应用程序
第二部分构建应用程序
1,应用程序开发过程
2,设计用户界面
3,定义交互
4,教程:串联图
1,应用程序开发过程
定义概念
设计用户界面
定义交互
实现行为整合数据
- 对象是应用程序的基石
- 类是对象的蓝图
- 对象通过消息通信
- 协议定义消息发送契约
- 整合数据
消息通信:
在 Objective-C 中,虽然可使用多种方法在对象之间发送消息,但是目前最常用的方法是使用方括号的基本语法。如果您有一个 Person 类的对象 somePerson,那么可以按照如下所述来向它发送消息 sayHello:
[somePerson sayHello];
左侧的引用 somePerson 是消息的接收者。右侧的消息 sayHello 是调用其方法的名称。换句话说,执行以上代码行时,会向 somePerson 发送 sayHello 消息。
协议定义消息发送契约:
协议定义对象在给定条件下的一组预期行为。它采用可编程的接口形式(任何类都可以选择来实现)。通过使用协议,两个因为继承而略有关联的类可以彼此通信来完成某个目标,例如解析 XML 代码或拷贝对象。
如果类能够提供为其他类使用的行为,那么该类可以声明可编程的接口,以匿名方式来供应该行为。任何其他类都可以选择采用该协议,并实现该协议的一个或多个方法,从而利用该行为
2,设计用户界面 3,定义交互
视图层次
UIKit视图对象是UIview类或其中一个子类的实例。UIKit框架提供了许多类型的视图,来帮助呈现和组织数据。
UIKit 大体可分为以下七种常见类型:内容;集;控制;栏;输入;容器;模态
3,定义交互
视图控制器

...
教程:串联图
本教程将向您讲述如何:
- 采用“Auto Layout”为用户界面增添灵活性
- 使用串联图来定义应用程序内容和流程
- 管理多个视图控制器
- 给用户界面中的元素添加操作
Xcode 能给串联图添加新的导航控制器、为其设定初始场景,并在新的导航控制器和现有的表格视图控制器之间建立关系。在画布上,如果您选择了连接两个场景的图标,就会发现这其实是一种根视图控制器关系。这表示导航栏下方显示的内容视图将为表格视图。初始场景设定为导航控制器,因为导航控制器保留了将显示在应用程序中的所有内容,它是待办事项列表和“add-to-do-item”场景的容器。
整合数据
应用程序的数据模型由数据结构和(可选)自定业务逻辑组成;
模型设计
需要考虑的问题:数据是什么类型的,数据结构是什么类型的
模型实现
使用设计模式
模式是抽象设计,而非代码。
MVC
模型 - 视图 - 控制器
模型会记录应用程序的数据,视图会显示用户界面并构成应用程序的内容,而控制器则会管理您的视图。
目标-操作
目标-操作从概念上讲是一个简单的设计:特定事件发生时,一个对象会向另一个对象发送信息。操作信息就是在源代码中定义的选择器,而目标(即接收信息的对象)则是能够执行该操作的对象(通常为视图控制器)。发送操作信息的对象通常为控制,例如按钮、滑块或开关,它能够触发事件对用户的交互操作(例如轻按、拖移或者值更改)作出响应。
委托
委托模式不仅普遍用于既有的框架类,而且也可应用在应用程序的两个自定对象之间。常见的设计是将委托作为一种手段,允许子视图控制器将某些值(通常为用户输入的值)传达到父视图控制器。
处理Foundation
值对象
Foundation 框架提供了为字符串、二进制数据、日期与时间、数字以及其他值产生值对象的类。
值对象是指封装了基本值(属于 C 数据类型)且提供与该值相关的服务的对象。您会频繁遇到值对象,作为应用程序调用的方法和函数的参数和返回值。框架的不同部分,甚至不同的框架都可以通过传递值对象来交换数据。
以下是 Foundation 框架中值对象的几个示例:
NSString 和 NSMutableString
NSData 和 NSMutableData
NSDate
NSNumber
NSValue
编写自定类
接口
@interface XYZToDoItem : NSObject @end
该示例声明了名为XYZToDoItem 的类,它继承自 NSObject
实现:
#import "XYZToDoItem.h" @implementation XYZToDoItem @end
如果您在类接口中声明了任何方法,那么需要在此文件中实现它们。
储存对象的数据的属性
#import "XYZToDoItem.h" /* 想要跟踪的标记是项目完成的日期属性,并且不想让其他类访问此信息,方法是将它放在实现文件(XYZToDoItem.m)顶部的类扩展中 */ @interface XYZToDoItem () @property NSDate *completionDate; @end @implementation XYZToDoItem @end
方法用来定义对象的行为
通过名称引带一个参数的方法时,冒号作为方法名称的一部分,所以方法名称是markAsCompleted: 。
- (void)markAsCompleted:(BOOL)isComplete onDate:(NSDate *)date;
更新代办事项的completionDate
例如,假设您想要让待办事项的 completionDate 保持更新。当待办事项被标记为完成,就将 completionDate 设定为当前日期。当它被标记为未完成,就将 completionDate 设定为 nil,因为它尚未完成。由于更新待办事项的 completionDate 是自包含任务,所以最好的做法是为其编写专属方法。但是,应当确定其他对象不能调用此方法。否则,其他对象可以随时将待办事项的 completionDate 设定为任何内容。因此,请将此方法设为私有。
@implementation XYZToDoItem
- (void)markAsCompleted:(BOOL)isComplete {
self.completed = isComlete;
[self setCompletionDate];
}
- (void)setCompletionDate {
if (self.completed) {
self.comletionDate = [NSDate date];
} else {
self.completionDate = nil;
}
}
@end
iOS-马上着手开发iOS应用应用程序-第二部分构建应用程序的更多相关文章
- 马上着手开发ios应用程序
https://developer.apple.com/library/ios/referencelibrary/GettingStarted/RoadMapiOSCh/chapters/Introd ...
- 马上着手开发 iOS 应用程序
https://developer.apple.com/library/ios/referencelibrary/GettingStarted/RoadMapiOSCh/chapters/Introd ...
- 马上着手开发Mac应用程序
你是否想要开发 Mac 应用程序却又不知道从哪里入手?本路线图提供了 Mac 应用程序开发的绝佳起点,即使你已经是一个 iOS 开发专家,本路线图对你依然适用.Apple让开发应用程序和提交应用程序到 ...
- iOS-马上着手开发iOS应用应用程序-第一部分介绍
教程:基础 main 中的 main.m 函数会调用自动释放池 (autorelease pool) 中的 UIApplicationMain 函数. @autoreleasepool { retur ...
- 微信小程序——使用vue构建小程序【外传】
文档 http://mpvue.com/mpvue/ 根据文档构建完成的页面如下 更多的,还要继续看下文档~
- 开发iOS应用程序需要的工具和编程技术
似乎每个iOS应用开发学习者都是从这篇文章开始写博客的,我也不例外,也从这里写吧,内容雷同,但绝对是原创.因为一直相信,通过自己的理解写出来,是掌握技术一个很好的途径. Xcode苹果最为优秀的集成开 ...
- 在Visual Studio中使用MonoTouch开发iOS应用程序
前段时间在工作机上装了Mac OS X,这主要是因为我最近需要开发iPhone应用程序.虽然Xcode,Objective C一定是开发iOS应用程序的主流,但是经过一番考虑,我还是决定尝试一下使用M ...
- iOS 9应用开发教程之定制应用程序图标以及真机测试
iOS 9应用开发教程之定制应用程序图标以及真机测试 定制ios9应用程序图标 在图1.12中可以看到应用程序的图标是网状白色图像,它是iOS模拟器上的应用程序默认的图标.这个图标是可以进行改变的.以 ...
- iOS开发--iOS及Mac开源项目和学习资料
文/零距离仰望星空(简书作者)原文链接:http://www.jianshu.com/p/f6cdbc8192ba著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 原文出处:codecl ...
随机推荐
- Ehcache缓存配置
Cache的配置很灵活,官方提供的Cache配置方式有好几种.你可以通过声明配置.在xml中配置.在程序里配置或者调用构造方法时传入不同的参数. 你可以将Cache的配置从代码中剥离出来,也可以在使用 ...
- MVVM: 通过 Binding 或 x:Bind 结合 Command 实现,通过 ButtonBase 触发命令
介绍背水一战 Windows 10 之 MVVM(Model-View-ViewModel) 通过 Binding 或 x:Bind 结合 Command 实现,通过 ButtonBase 触发命令 ...
- 在编译向该请求提供服务所需资源的过程中出现错误。请检查下列特定错误详细信息并适当地修改源代码。 编译器错误消息: CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\41c191fd\ff9345c5\App_Web_login.cshtml.65793277
本地开发环境没问题,但是发布到服务器出现问题或则直接在IIS上修改东西就给我抛出以下错误: 未能写入输出文件"c:\Windows\Microsoft.NET\Framework64 \v4 ...
- Quality Trimming Via Trimmomatic
已经去除接头(adapter) java -jar trimmomatic.jar PE -threads 20 -phred33 \ left.fastq.gz right.fastq.gz \ l ...
- Linux解压命令(tar)
tar zxvf phddns_raspberry.tgz tar默认解压到当前目录 参数: 运行tar时必须要有下列参数中的至少一个才可运行 -A, --catenate, --concatenat ...
- [NOIP2014] 提高组 洛谷P2038 无线网络发射器选址
题目描述 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129 条东西向街道和129 条南北向街道所形成的网格状,并且相邻 ...
- 【Alpha阶段】第三次Scrum例会
会议信息 时间:2016.10.19 21:00 时长:0.5h 地点:大运村1号公寓5楼楼道 类型:日常Scrum会议 个人任务报告 姓名 今日已完成Issue 明日计划Issue 今日已做事务 工 ...
- CentOS 6 日期 时间,时区,设置修改及时间同步
一.时区 显示时区 date --help 获取帮助 date -R date +%z 上面两个命令都可 [root@localhost ~]# date -R; date +%z Fri, 19 O ...
- RMQ模板
RMQ:范围最小值问题.给出一个n个元素的数组A1,A2,...,An,设计一个数据结构支持查询操作Query(L,R):计算min{AL,AL+1,...,AR}. 每次用一个循环来求最小值显然不够 ...
- yum出现“No module named yum”错误解决方法
安装了一个Python2.7,隔天发现yum无法使用,报错信息如下,应该是系统是使用的默认的python2.6的版本 解决办法修改yum文件#vi /usr/bin/yum将 #!/usr/bin/p ...