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 ...
随机推荐
- Echarts-柱状图柱图宽度设置
先看两张图 图中柱图只需要设置series中的坐标系属性barWidth就可以, 这种图柱状图,折叠柱状图都适应 eg: /** * 堆积柱状图 * @param xaxisdata x轴:标签(数组 ...
- wow.js使用方法
近日,在做项目中,需要做到滚动条滑到某个位置时,才能显示动画,网上查询到有个wow.js可以达到要求,现在把使用方法做如下总结: wow.js演示地址 wow.js的github地址 使用方法真是超简 ...
- BeautifulSoup_python3
1.错误排除 bsObj = BeautifulSoup(html.read()) 报错: UserWarning: No parser was explicitly specified, so I' ...
- Python % 格式化字符串
格式字符串 python 使用一个字符串作为模板 模板中含有格式符,为真实值预留位置 使用tuple或者字典来传递值 模板和值之间,用 % 来表示格式化操作 例子: 1) tuple 传值 print ...
- Jenkins的FTP上传插件Publish Over FTP Plugin设置支持中文路径
[系统管理]->[系统设置]->[Publish over FTP]->[Control encoding]->输入[GB2312]或者[UTF-8]
- phpMyadmin /scripts/setup.php Execute Arbitrary PHP Code Via unserialize Vul Object Injection PMASA-2010-4
目录 . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 对这个漏洞简单的概括如下 . "/scripts/setup.php&q ...
- Java多线程实践
1.实现Runnable接口 import java.util.Random; public class PrintTask implements Runnable{ private final in ...
- React Native 开发之 (05) flexbox布局
一 flexbox布局 1 flex布局 flexbox是ReactNative 应用开发中必不可少的内容,也是最常用的内容. 传统的页面布局是基于盒子模型,依赖定位属性,流动属性和显示属性来解决. ...
- C++ Primer Plus读书笔记
第五章 循环和关系表达式 1. 2.类别别名: (1) #define FLOAT_POINTER float * FLOAT_POINTER pa, pb; 预处理器置换将该声明转换成 flo ...
- jQuery 基础(3) -- jQuery 事件
jQuery 是为事件处理特别设计的.什么是事件?页面对不同访问者的响应叫做事件.事件处理程序指的是当 HTML 中发生某些事件时所调用的方法.实例:在元素上移动鼠标.选取单选按钮点击元素在事件中经常 ...