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 ...
随机推荐
- mysql-存储过程案例-存储过程中创建表和修改表数据
-- 本存储过程有特殊执行循环数量的要求,是对security_market_history表进行修正 -- 判断存储过程是否存在 drop PROCEDURE if exists proc_secu ...
- lucene-查询query->TermQuery按词条搜索
TermQuery是最简单.也是最常用的Query.TermQuery可以理解成为“词条搜索”,在搜索引擎中最基本的搜索就是在索引中搜索某一词条,而TermQuery就是用来完成这项工作的. 在Lu ...
- mysql-拼接字段concat,concat_ws函数
Mysql的查询结果行字段拼接,可以用下面两个函数实现: 1. concat函数 mysql') from test ; +---------------------+ ') | +--------- ...
- 绑定: DataContextChanged, UpdateSourceTrigger, 对绑定的数据做自定义转换
介绍背水一战 Windows 10 之 绑定 DataContextChanged - FrameworkElement 的 DataContext 发生变化时触发的事件 UpdateSourceTr ...
- 【hdu 5918】Sequence I(KMP)
给定两个数字序列,求a序列中每隔p个构成的p+1个序列中共能匹配多少个b序列. 例如1 1 2 2 3 3 每隔1个的序列有两个1 2 3 kmp,匹配时每次主串往前p个,枚举1到p为起点. 题目 # ...
- Debugger 怎么用
Debugger 是一个很有用的工具,尤其对于workflow开发人员来说.可以帮助我们check 从source 到target的数据流.我们可以看到什么数据从source中流出,在接下来的tran ...
- 68.Android之透明状态栏
转载:http://www.jianshu.com/p/2f17d0e7f6b0 Android开发中需要透明状态栏,注意:本文只适配Android4.4以上及5.0以上设备 概述 有时候我们想在 a ...
- Shiro-密码的MD5加密
1.密码的加密 在数据表中存的密码不应该是123456,而应该是123456加密之后的字符串,而且还要求这个加密算法是不可逆的,即由加密后的字符串不能反推回来原来的密码,如果能反推回来那这个加密是没有 ...
- BZOJ 3721: PA2014 Final Bazarek
3721: PA2014 Final Bazarek Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 645 Solved: 261[Submit][ ...
- [vijos1427]机密信息
Description 有个很奇怪的习惯,他把他所有的机密信息都存放在一个叫机密盘的磁盘分区里,然而这个机密盘中却没有一个文件,那他是怎么存放信息呢?聪明的你一定想到了,的信息都是以文件夹名称的形式保 ...