UI控件及方法大集合

废话不多说,直接上干货


---------------------------------------------------------------------

(1)

一、main.m

1、main函数,程序唯一的入口

2、UIApplicationMain函数函数作用

1)创建一个应用程序UIApplication对象,他是应用程序的象征,一个UIApplication对象就代表一个应用程序

2)指定谁管理应用程序的生命周期

2)建立一个事件循环来捕捉处理用户的行为

3、永远不用尝试改变main.m中的内容

二、程序的生命周期

1、UIApplication对象实例化后,程序启动时首先会调用该方法

- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions

2、当应用程序将要进入非活动状态执行,比如来电话了、锁屏等。

- (void)applicationWillResignActive:(UIApplication *)application

3、当应用程序进入活动状态执行,这个刚好跟上面那个方法相反

- (void)applicationDidBecomeActive:(UIApplication *)application

4、一般程序进入后台,就会进入非活跃状态,但如果你的程序支持后台,程序在后台也保持活跃状态

- (void)applicationDidEnterBackground:(UIApplication *)application

5、程序进入前台

- (void)applicationWillEnterForeground:(UIApplication *)application

6、当程序将要退出是被调用,通常是用来保存数据和一些退出前的清理工作

- (void)applicationWillTerminate:(UIApplication *)application

7、找到info.plist文件,添加Application does not run in background,并设置YES,使应用不支持后台操作,一旦退到后台程序就退出

8、练习

验证应用程序的声明周期

三、UIWindow

1、在iOS中,使用窗口与试图在屏幕上显示应用程序的内容,窗口本身不具有任何可见的内容,但他对于应用程序的试图提供一个基本的容器,试图定义你想要的一些内容,例如:图像、文本、表格等等

2、程序中每个时刻只能有一个UIWindow是keyWindow,通常应用程序只有一个window

3、iOS程序启动完毕后,会首先创建一个UIWindow

4、一个iOS程序之所以能显示到屏幕上,完全是因为它有UIWindow,也就是说没有UIWindow,就看不见任何UI界面

5、常用方法

1)让当前UIWindow变成keyWindow(主窗口)

- (void)makeKeyWindow;

2)让主窗口显示出来

- (void)makeKeyAndVisible;

6、练习

自己创建一个window作为主窗口

四、程序的完整启动过程

1、main函数

2、UIApplicationMain

1)创建UIApplication对象

2)创建UIApplication的delegate对象

3、delegate对象开始处理(监听)系统事件

1)程序启动完毕的时候, 就会调用代理的application:didFinishLaunchingWithOptions:方法

2)在application:didFinishLaunchingWithOptions:中创建UIWindow

3)创建和设置UIWindow的rootViewController

4)显示窗口

五、手机屏幕的几个概念

1、UIScreen

可以充当iOS物理屏幕的替代者,

[UIScreen mainScreen] bounds] 能够获取屏幕大小

2、屏幕尺寸

指具体的屏幕物理长度,以屏幕的对角线的长度作为试试

3、像素

图像由一个个点组成,这个点叫做像素

4、屏幕分辨率

指屏幕屏幕上总共的物理像素点

5、屏幕尺寸

设备      屏幕尺寸  分辨率(pt) reader 分辨率(px)

3GS      3.5      320*480  @1x    320*480

4/4S      3.5      320*480  @2x    640*960

5/5S/5C  4.0      320*568  @2x    750*134

6        4.7      375*667  @2x    750*1334

6P        5.5      414*736  @3x    1242*2208

pt: 用于计算屏幕上的坐标

六、iOS坐标系统

1、iPhone的试图坐标系是以左上角为原点

2、每一个view的frame所使用的坐标系以它的父试图的左上角为原点

3、试图结构和相关函数

//试图显示的位置

CGPoint point = CGPointMake(x,y)

//试图显示的大小

CGSize size = CGSizeMake(width,height)

//试图显示的位置和大小

CGRect rect = CGRectMake(x,y,width,height);

4、frame/Bounds/center

frame: 包含试图的位置和大小

Bounds:包含试图的大小,位置默认是(0,0)

center:包含试图中心点所在的位置


(2)


一、UIViwe基本概念

1、iPhone上看到的控件大部分都是UIView的子类

2、UIView的三个作用

布局、动画、事件传递

二、UIView的常用方法

UIKit是一个提供了在iOS上实现图形,事件驱动程序的框架,能看到的到的试图都在UIKit框架中

UIView是视图的基类

1、 基本的添加和删除

// 添加子视图

addSubview:

// 视图插入到指定索引位置

insertSubview:atIndex:

// 视图插入指定视图之上

insertSubview:aboveSubview:

// 视图插入指定视图之下

insertSubview:belowSubview:

// 把视图移动到最顶层

bringSubviewToFront:

// 把视图移动到最底层

sendSubviewToBack:

//把两个索引对应的视图调换位置

exchangeSubviewAtIndex:withSubviewAtIndex

// 把视图从父视图中移除

removeFromSuperview

2、查找试图

viewWithTag

subViews

3、常用属性

alpha                  透明度

backgroundColor        背景颜色

subViews              子视图集合

hidden                是否隐藏

//标签值

tag

//父视图

superview

//是否响应触摸事件

userInteractionEnabled

4、坐标系统变换

在OC中,通过transform属性可以修改对象的平移、缩放比例和旋转角度

1、CGAffineTransformScale    对视图比例缩放

2、CGAffineTransformRotate  对视图做变焦旋转

3、CGAffineTransformTranslate 对视图在原来的位置上做平移

5、动画

开始动画,将改变属性的代码放在开始和提交之前

[UIView beginAnimations:nil context:nil]

提交动画

[UIView commitAnimations]之间

当动画即将开始时执行

+ (void)setAnimationWillStartSelector:(SEL)selector  执行delegate对象的selector

当动画结束时执行

+(void)setAnimationDidStopSelector:(SEL)selector

动画的持续时间,秒为单位

+ (void)setAnimationDuration:(NSTimeInterval)duration

动画延迟delay秒后再开始

+ (void)setAnimationDelay:(NSTimeInterval)delay

动画的开始时间,默认为now

+ (void)setAnimationStartDate:(NSDate *)startDate

动画的重复次数

+ (void)setAnimationRepeatCount:(float)repeatCount

如果设置为YES,代表动画每次重复执行的效果会跟上一次相反

+ (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses


(3)


一、UIViewController的基本概念

1、见名知意,试图控制器

3、每个试图控制器都自带一个试图,并且负责这个试图相关的一切事务

4、对于iOS应用程序来说,每一个页面都是都是一个控制器,通过切换不同的控制器,来实现切换不同的界面

4、在MVC体系中负责Model与View的通信

5、检测设备旋转以及内存警告

想要App支持某个方向,需要两个设置:

1) Deployment Info 中,勾选 Device Orientation

2) 在控制器中,重写 supportedInterfaceOrientations 方法。(如不重写,IPad 默认是UIInterfaceorientationMaskAll , IPhone 默认是 UIInterfaceOrientationMaskAllButUpsideDown )

模拟器模拟内存警告

选中模拟器->hardware->simulate memory warning

6、UIViewController是所有试图控制器类的基类,定义了试图控制器的基本功能

二、UIViewController的生命周期

0、每次访问控制器的view,view是nil的话就会自动调用该方法,如果重写在这个方法内必须给控制器设置一个根试图,如果不给的话程序就会无限循环直到程序奔溃

loadView

1、控制器的View加载完毕

viewDidLoad

2、View即将显示到window上

viewWillAppear

3、view显示完毕

viewDidAppear

4、View即将从window上移除

viewWillDisappear

5、view从window上移除完毕

viewDidDisappear

6、view即将销毁的时候调用

viewWillUnload

7、view销毁完毕的时候调用

viewDidUnload

8、当接收到内存警告的时候

didReceiveMemoryWarning

9、具体流程查看课件中的图片

五、模态试图的使用

1、模态视图不是专门的某个类,而是通过视图控制器的presentModalViewController:方法弹出的视图我们都称为模态视图

2、模态视图出现的场景一般是临时弹出的窗口,譬如:登陆窗口

3、通过设置将要弹出控制器的modalTransitionStyle属性设置不同的动画效果

3、弹出,

presentModalViewController:

4、取消:

dismissModalViewControllerAnimated: 方法关闭窗口

UIControl的事件

1、UIControlEventTouchDown

单点触摸按下事件:用户点触屏幕,或者又有新手指落下的时候。

2、UIControlEventTouchDownRepeat

多点触摸按下事件,点触计数大于1:用户按下第二、三、或第四根手指的时候。

3、UIControlEventTouchDragInside

当一次触摸在控件窗口内拖动时。

4、当一次触摸在控件窗口之外拖动时

UIControlEventTouchDragOutside

5、当一次触摸从控件窗口之外拖动到内部时

UIControlEventTouchDragEnter

6、当一次触摸从控件窗口内部拖动到外部时

UIControlEventTouchDragExit

7、所有在控件之内触摸抬起事件

UIControlEventTouchUpInside

9、点击手指抬起时

UIControlEventTouchUpInside

10、所有触摸取消事件,即一次触摸因为放上了太多手指而被取消,或者被上锁或者电话呼叫打断。

UIControlEventTouchCancel


(3)

一、UINavigationController(导航控制器)

1、基本概念

1)继承于UIViewControler

2)相当于一个容器用来管理有层级关系的控制器

3)采用栈的方式管理所有controller,每个controller管理各自的试图。

栈:

向栈中添加一个对象的操作称为入栈

在栈中删除一个对象的操作称为出栈

第一个入栈的对象叫做基栈

最后一个入栈的对象,叫做栈顶

当前显示的试图控制器,即为栈顶。

对象出栈、入栈的方式:后进先出,先进后出

4)提供返回上一级controller的默认button和方法

5)创建时要给导航控制器设置根控制器

2、结构,包含三个部分

1)navigationBar

2) 内容试图

3)toolBar,因为不常用,默认是隐藏的

3、常用属性和方法

属性

1)获取到在栈中最顶层的试图控制器

topViewController

2)获取到在栈中当前显示的试图控制器

visibleViewController

3)在栈中当前有的试图控制器

viewControllers

4)隐藏导航栏

navigationBarHidden

5)获取到导航栏

navigationBar

方法

1)初始化一个根视图控制器,在栈的最底层

initWithRootViewController:(UIViewController *)rootViewController;

2)往栈中压入一个新的控制器

pushViewController:(UIViewController *)viewController animated:(BOOL)animated;

3)移除栈顶的一个控制器

- (UIViewController *)popViewControllerAnimated:(BOOL)animated;

4)弹出到指定的视图控制器中,返回的数组代表要出栈中移除的对象

- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;

5)回到根视图控制器

- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;

二、练习

在第二个视图控制器在添加一个UIButton实例,单击该按钮时,压入一个新的视图控制器。在该视图中添加四个按钮,依次实现,

1、压入一个新的视图控制器;

2、返回上一个视图控制器;

3、返回根视图控制器;

4、返回指定的视图控制器

三、UINavigationBar(导航栏)

1、基本概念

1)和导航控制器一样,是一个容器,用来显示导航栏上的试图,

2) 竖屏44 横屏32

2、配置外观

1) 设置导航栏样式

self.navigationController.navigationBar.barStyle = UIBarStyleBlack;

2)设置导航栏是否透明,设为不透明能够屏蔽导航栏对试图frame的影响

self.navigationController.navigationBar.translucent = NO;

1) 配置背景颜色

self.navigationController.navigationBar.barTintColor = [UIColor redColor];

2)配置背景图片

self.navigationController.navigationBar setBackgroundImage: forBarMetrics:

3) 改变导航栏上默认按钮颜色

self.navigationBar.tintColor

3、配置内容

1)每个controller都有专属的navigationItem

1)通过配置不同控制器的navigationItem让不同控制器的导航栏显示不同的内容

2)navigationItem的常用属性

leftBarButtonItem

rightBarButtonItem

backBarButtonItem

title

titleView

3) backBarButtonItem是由上一层控制器控制的

4) 导航栏的prompt属性,通过navigationItem来设置,其主要作用是用于提示用户。比如,用户正在请求网络数据时,提示用户数据正在加载。待加载完成后可以将它的值设置为nil,取消显示。

四、练习

将自己项目的注册按钮放到右上角,修改系统自带的返回按钮


(4)


一、分栏控制器的基本概念

1、UITabBarController和UINavigationController一样是用来管理试图控制器的

2、与导航控制器不同,tab控制器使用数组管理子试图控制器的,并且子试图之间是平等关系,导航控制器所管理的试图控制器之间上

练习:

1、创建若干个子视图控制器(它们是并列的关系)

2、创建一个数组,将已创建的子视图控制器,添加到数组中

3、创建UITabBarController实例

4、tabBarController.viewControllers = viewControllers;

5、添加到window的rootViewController中

二、分栏试图控制器的结构

1、有两部分组成

1)contentView:显示当前controller的view

2) tabBar(标签栏):负责切换显示controller, 高度为49

2、tabBar

1) 标签栏是唯一的,就好比导航控制器的导航栏

2) 设置分栏的颜色

barTintColor

3) 设置分栏的背景图片

backgroundImage

4)标签栏的显示与隐藏

hidden

5)设置导航控制器默认显示的控制器

selectedIndex

3、tabBarItem

1) 用来控制一组控制器的切换,类似选项卡,每个Tab控制一个试图控制器,点击哪个tab就显示对应的试图控制器,当前的试图控制器

2) 每个tabBarItem都可以设置title、image/selectedImages、badgeValue

3) 设置选中的颜色

分栏控制器.tabBar.tintColor

3) TabBar只能显示五个tab Item,如果超过五个则会自动生成个Morede 标签显示剩余的Tab,这些Tab可以通过编辑显示在UITabBar上

4) 自定义Item

[UITabBarItem alloc]initWithTitle: image: tag:

[UITabBarItem alloc]initWithTabBarSystemItem:tag:

3、支持国际化

1)找到plist文件

2)右键  add row

3)Localizations  默认就一个ENGLISH

4)在 添加一个 Item 1  Chinese (simplified)

练习:

1、初始化我们需要在tabBarController中显示的视图控制器

2、初始化UItabBarItem

3、在子视图控制器中添加UItabBarItem

4、我们将子视图控制器放入数组中

5、初始化tabBarcontroller

6、将数组放入tabBar控制器中,方法viewControllers

三、代理监听分栏控制器的切换

1、视图将要切换时调用,viewController为将要显示的控制器,如果返回的值为NO,则无法点击其它分栏了

- (BOOL)tabBarController:(UITabBarController *)tabBarControllershouldSelectViewController:(UIViewController *)viewController

2、视图已经切换后调用,viewController 是已经显示的控制器

- (void)tabBarController:(UITabBarController *)tabBarControllerdidSelectViewController:(UIViewController *)viewController

3、将要开始自定义item的顺序

- (void)tabBarController:(UITabBarController *)tabBarController willBeginCustomizingViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers

4、将要结束自定义item的顺序

- (void)tabBarController:(UITabBarController *)tabBarController willEndCustomizingViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers changed:(BOOL)changed

5、结束自定义item的顺序

- (void)tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers changed:(BOOL)changed

四、集成分栏控制器和导航控制器

1、在Tab Bar控制器中某一个Tab中使用Navigation控制器,这是最常见的用法,我们将在下面具体讲解这个用法

2、在一个Navigation控制器控制下的某一个或某些控制器是Tab Bar控制器,这时对该Tab Bar控制器的压入和弹出方法和普通视图控制器一样

五、总结

1、UINavigationController、UITabBarController和UIViewController通常都是组合出现的,一定要熟练使用

2、UINavigationController、UITabBarController都是UIViewController的子类,管理的都是UIViewContrller

3、UINavigationController可以嵌套UITabBarController

4、UITabBarController可以嵌套UINavigationController


(5)


一、表视图的介绍

1、表视图,是iOS中最重要的试图,很多应用程序都会使用到,

2、表试图里面可以放很多行信息

3、表视图的两种风格

1)普通风格

UITableViewStylePlain

2)分组风格

UITableViewStyleGrouped

3)UITableViewStylePlain和UITableViewStyleGrouped。这两者操作起来其实并没有本质区别,只是后者按分组样式显示前者按照普通样式显示而已。

二、表视图的基本结构

1、表视图有表头、表尾、中间一连串单元格试图组成

1)设置表头

tableHeaderView

2)设置单元格试图

UITableViewCell,单元格也可以分段显示,每一段都可以通过代理设置段头和段尾

2)设置表尾

tableFooterView

3) tableView的常用属性和方法

设置表视图分割线风格

@property(nonatomic) UITableViewCellSeparatorStyle separatorStyle;

设置表视图分割线颜色,默认标准灰色

@property(nonatomic,retain) UIColor *separatorColor;

设置表视图的头部视图

@property(nonatomic,retain) UIView *tableHeaderView;

设置表视图的尾部视图

@property(nonatomic,retain) UIView *tableFooterView;

设置表视图单元格的行高

@property(nonatomic) CGFloat rowHeight;

设置表视图背景

@property(nonatomic, readwrite, retain) UIView *backgroundView

刷新表视图单元格中数据

- (void)reloadData;

显示指示条

showsVerticalScrollIndicator

设置表视图section头部行高

@property(nonatomic) CGFloat sectionHeaderHeight;

设置表视图section尾部部行高

@property(nonatomic) CGFloat sectionFooterHeight

三、单元格的显示

1、单元格的位置表示

NSIndexPath:能表示当前cell是tableView的第几段第几行

2、单元格的创建

UITableViewCell * cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];

cell的样式

1)UITableViewCellStyleDefault

左侧显示textLabel,imageView显示在最左边

2)UITableViewCellStyleValue1

左侧显示textLabel、右侧显示detailTextLabel,imageView显示在最左边

3)UITableViewCellStyleValue2

左侧依次显示textLabel(默认蓝色)和detailTextLabel,imageView可选

4)UITableViewCellStyleSubtitle

左上方显示textLabel,左下方显示detailTextLabel,imageView显示在最左边

cell的辅助图标 accessoryType

1) 不显示任何图标

UITableViewCellAccessoryNone,

2) 跳转指示图标

UITableViewCellAccessoryDisclosureIndicator

3) 内容详情图标和跳转指示图标

UITableViewCellAccessoryDetailDisclosureButton

4) 勾选图标

UITableViewCellAccessoryCheckmark

5) 内容详情图标

UITableViewCellAccessoryDetailButton

5) 自定义辅助图标

accessoryView属性

3、cell的常用属性

1)设置cell的背景试图

backgroundView

2)设置选中的cellbei的背景图片

selectedBackgroundView

3) 设置选中时的样式

selectionStyle

练习:不分组的名人录

四、数据源方法(UITableViewDatasource)

1、实例化表视图时,必须要实现他的数据源方法,以此来完成表中数据的配置,一般来说数据源方法是用来配置表中的数据

2、常用数据源方法

1)配置section中含有行数

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

2)创建单元格实例

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

3) 配置表视图section个数,默认为1

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;

4)section中的头部视图的标题

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;

5)section中的尾部视图的标题

- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section;

/* 表视图的编辑 移动、删除等 */

6)指定单元格是否支持编辑

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath*)indexPath;

7)指定单元格是否支持移动

- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath*)indexPath;

8)用户编辑了哪一个单元格,在这里执行删除操作

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath*)indexPath;

9)实现此方法,移动单元格

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath;

五、代理方法(UITableViewDelegate)

1、一般是处理表视图基本样式(单元格高度)以及捕捉选中单元格事件

2、常用代理方法

1)配置行高

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;

2)设置section 头部、尾部视图的高度

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;

3)自定义section头部、尾部视图,注意:需要指定高度

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;

4)用户单击单元格中辅助按钮时,调用该方法

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath;

5)用户单击单元格,调用该方法

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;

6)取消选中单元格时,调用该方法

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(3_0);

7)设置单元格编辑样式

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath;

练习:分组的名字录

1、设置段头、段尾

2、自定义段头段尾

一、表视图常用属性和方法

属性

1、设置表视图分割线风格

@property(nonatomic) UITableViewCellSeparatorStyle separatorStyle;

2、设置表视图分割线颜色,默认标准灰色

@property(nonatomic,retain) UIColor *separatorColor;

3、设置表视图的头部视图

@property(nonatomic,retain) UIView *tableHeaderView;

4、设置表视图的尾部视图

@property(nonatomic,retain) UIView *tableFooterView;

5、设置表视图单元格的行高

@property(nonatomic) CGFloat rowHeight;

6、设置表视图背景

@property(nonatomic, readwrite, retain) UIView *backgroundView

7、刷新表视图单元格中数据

- (void)reloadData;

8、设置表视图section头部行高

@property(nonatomic) CGFloat sectionHeaderHeight;

9、设置表视图section尾部部行高

@property(nonatomic) CGFloat sectionFooterHeight;

10、 刷新表视图section中数据

- (void)reloadSectionIndexTitles

11、默认为NO,不可以编辑,设置时,不存在动画效果

@property(nonatomic,getter=isEditing) BOOL editing;

12、覆盖此方法,存在动画效果

- (void)setEditing:(BOOL)editing animated:(BOOL)animated;

13、默认为YES,当表视图不在编辑时,单元格是否可以选中

@property(nonatomic) BOOL allowsSelection NS_AVAILABLE_IOS(3_0);

14、默认为NO,当表视图在编辑时,单元格是否可以选中

@property(nonatomic) BOOL allowsSelectionDuringEditing;

15、默认为NO,是否可以同时选中多个单元格,注意版本问题

@property(nonatomic) BOOL allowsMultipleSelection

17、 默认为NO,在编辑状态下时,是否可以同时选中多个单元格,注意版本问题

@property(nonatomic) BOOL allowsMultipleSelectionDuringEditing

方法

1、指定一个cell,返回一个NSIndexPath实例,如果cell没有显示,返回nil

- (NSIndexPath *)indexPathForCell:(UITableViewCell *)cell;

2、指定一个范围,返回一个数组,内容是NSIndexPath实例,指定rect无效,返回nil

- (NSArray *)indexPathsForRowsInRect:(CGRect)rect;

3、指定一个NSIndexPath,返回一个cell实例,如果cell没有显示,返回为nil

- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath;

4、根据显示的cell,返回一组cell实例的数组,如果没有显示,返回nil

- (NSArray *)visibleCells;

5、根据显示的cell,返回一组NSIndexPath实例的数组,如果没有显示,返回nil

- (NSArray *)indexPathsForVisibleRows;

6、滑动到指定的位置,可以配置动画

- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated;

7、插入一行cell,指定一个实现动画效果

- (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;

8、删除一行cell, 指定一个实现动画效果

- (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;

9、刷新一个行cell,指定一个实现动画效果

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation NS_AVAILABLE_IOS(3_0);

10、移动cell的位置,指定一个实现动画效果

- (void)moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath*)newIndexPath NS_AVAILABLE_IOS(5_0);


(6)


-、表视图的编辑状态

1、表视图的编辑状态有两种

insert和delete

2、实现表视图编辑的步骤

1)让tableview处于编辑状态

self.tableView.editing

2)通过代理方法确定tableView处于哪种状态(添加还是删除)

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{

3)选择添加或者删除通过代理方法来做不同的处理

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

二、单元格的移动

只需实现两个代理方法

1、实现代理方法,让tableView的单元格支持移动,如果该方法返回为NO,则不支持单元格的移动,该方法一般可省略

- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath

2、实现代理方法,指定从哪里移到哪里

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath

一、谓词的基本概念

cocoa中提供了NSPredicate类,指定过滤器的条件,将符合条件的对象保留下来

二、创建谓词的步骤

1、设置谓词条件

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age <= 28"];

2、使用谓词

1) 判断当前对象是满足条件

[predicate evaluateWithObject:id]

2) 将数组中满足条件的内容翻到数组中并返回该数组

[array filteredArrayUsingPredicate:predicate];

三、运算符,谓词中的字符串用单引号括起来

1、逻辑运算符 &&(AND) ||(OR)

[NSPredicate predicateWithFormat:@"age<25 || age>27"];

2、根据关键字查询 IN

[NSPredicate predicateWithFormat:@"name in {'tom-8','jack-3','xxx'}"];

[NSPredicate predicateWithFormat:@"name in %@",inArray];

3、检查某个字是否以**开头  BEGINSWITH

[NSPredicate predicateWithFormat:@"name BEGINSWITH 't' "];

4、检查某个单词是否已**结尾 ENDSWITH

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name ENDSWITH 't' "];

5、是否包含某个字符 CONTAINS

[NSPredicate predicateWithFormat:@"name CONTAINS 'a'"];

6、检查包含某个字符(模糊查询) Like,?和*可作为通配符,其中?匹配1个字符,*匹配0个或者多个字符

[NSPredicate predicateWithFormat:@"name like '??c*'"];


(7)


一、事件

1、在iOS上,事件有多种形式

1)触摸事件

2)运动事件

3)远程控制事件

2、UIView不接收触摸事件的三种情况

1.不接收用户交互

userInteractionEnabled = NO

2.隐藏

hidden = YES

3.透明

alpha = 0.0 ~ 0.01

提示:UIImageView的userInteractionEnabled默认就是NO,因此UIImageView以及它的子控件默认是不能接收触摸事件的

二、事件处理基本方法

1、一个或多个手指触碰屏幕

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;

2、一个或多个手指在屏幕上移动

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;

3、一个或多个手指离开屏幕

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;

4、触摸序列被诸如电话呼入这样的系统事件取消

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event

三、UITouch触摸对象

当用户触摸屏幕时,事件会被封装成一个event实例,包含了用户触摸的相关信息,event实例中包含着若干个UITouch实例,一个touch代表着用户的一个手指

1、UITouch常用属性

1)window

触摸产生时所处的窗口

2)view

触摸产生时所处的试图

3)tapCount

tap(轻击)操作,和鼠标单独单击操作类似,tapCount表示短时间内轻击屏幕的次数,因此可以根据tapCount判断单击、双击或更多的轻击

双击试图是时单击也会执行的解决方法

if (touch.tapCount == 1) {

//延迟0.5秒执行 runLoop会计算这个时间

[self performSelector:@selector(singleTap) withObject:nil afterDelay:0.5];

}else{

//告诉runLoop取消调用某个延迟的方法

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(singleTap) object:nil];

[self doubleTap];

}

4)timestamp

记录了触摸事件产生或变化时的时间,单位是秒

5)phase

触摸事件在屏幕上有一个周期,即触摸开始、触摸点移动、触摸点结束,还有中途取消,通过phase可以查看当前触摸事件在一个周期中所处的状态,pase是一个枚举,包含:

//触摸开始

UITouchPhaseBegan

//接触点移动

UITouchPhaseMoved

//接触点无移动

UITouchPhaseStationary

//触摸结束

UITouchPhaseEnded

//触摸取消

UITouchPhaseCancelled

2、UITouch常用方法

1)返回一个CGPoint类型的值,表示触摸在view这个视图上的位置,这里返回的位置是针对view的坐标系的

- (CGPoint)locationInView:(UIView *)view

2)该方法记录了前一个坐标值

- (CGPoint)previousLocationInView:(UIView *)view:

一、事件传递

1、从事件发生到其处理的对象,传递要经过特殊的一段过程,当用户点击设备屏幕时,iOS捕捉到一系列的触摸,将其打包到UIEvent对象并放置到应用程序活动事件队列中

2、UIApplication对象从事件队列中取出最前面的事件并将其分发,通常,其将事件发送给应用程序的主窗口-UIWindow实例,再由窗口对象发送事件给第一响应者处理,一般通过touchesBegan方法获取该事件

3、具体过程

1)先将事件对象由上往下传递(由父控件传递给子控件),找到最合适的控件来处理这个事件

2)调用最合适控件的touches方法

3)如果调用了[super touches...]方法,就会将事件顺着响应者链条往上传递,传递给上一个响应者

4)接着就会调用上一个响应者的touches...方法

二、响应者链

1、基本概念

响应者对象是一个能接受并处理事件的对象,UIResponser是所有响应者对象的基类,该基类定义了一系列编程接口,不但为事件处理进行服务而且还提供了通用的响应行为处理,UIApplication、UIView(UIWindow)、UIViewController都直接或间接的继承自UIResponser,所有的这些类的实例都是响应者对象

响应者链表示一系列的响应者对象,事件被交由第一响应者对象处理,如果第一响应者不处理,事件被沿着响应者链向上传递,交给下一个响应者(nextresponder)

2、事件响应者链传递的过程

1、当用户与试图交互时,会将消息传递给试图控制器,如果不存在控制器,传递给父试图

2、如果不处理该消息,则继续将消息向上传递,如果最上层的试图也不处理,将事件交给window对象,最后交由UIApplication实例,如果不处理,丢弃事件

PS:传递方式

[self.nextResponder touchesBegan:touches withEvent:event];

3、通过响应者链传递可以让多个试图响应同一个手势

三、练习

事件的传递演示

四、手势识别器

UIGestureRecognizer类,用于检测、识别用户使用设备时所用的手势,他是一个抽象类,定义了所有手势的基本行为,以下是UIGestureRecognizer子类,用与处理具体的用户手势行为

1、轻击

UITapGestureRecognizer

常用属性

//点击次数

numberOfTapsRequired

//消除两个手势的影响

requireGestureRecognizerToFail

//手指的数量,需将试图的multipleTouchEnabled设为YES

numberOfTouchesRequired

2、轻扫

UISwipeGestureRecognizer

常用属性

清扫方向,默认是右

direction

3、长按

UILongPressGestureRecognizer

常用属性

最小长按时间

minimumPressDuration

注意事项

如果不判断会调用2次 按下2秒后自己调用一次 松开后又要调用一次

if (longPress.state == UIGestureRecognizerStateEnded) {

return;

}

NSLog(@"长按");

4、平移

UIPanGestureRecognizer

常用方法

获取触摸的位置

locationInView

注意事项

- (void)panAction:(UIPanGestureRecognizer *)gesture{

// 1.在view上面挪动的距离 //translationInView表示相对于起点挪动的位置是最新2点之间的间距

CGPoint translation = [gesture translationInView:gesture.view];

CGPoint center = gesture.view.center;

center.x += translation.x;

center.y += translation.y;

gesture.view.center = center;

// 2.清空移动的距离

[gesture setTranslation:CGPointZero inView:gesture.view];

}

5、捏合

UIPinchGestureRecognizer

注意事项:

每次调用过方法后,记得将scale置1,否则你的图片在捏合一点便会变很大或很小

6、旋转

UIRotationGestureRecognizer

注意事项:

每次调用过方法后,记得将rotation置0,否则图片旋转不正常

7、手势识别器的代理方法

/**

*  是否允许多个手势识别器同时有效

*  Simultaneously : 同时地

*/

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

{

return YES;

}

8、重要的事情说三遍

实现旋转、缩放、平移的时候一定要清零

实现旋转、缩放、平移的时候一定要清零

实现旋转、缩放、平移的时候一定要清零


(8)

一、滑动试图(UIScrollView)

1、基本概念

1) 移动设备的屏幕大小是极其有限的,因此直接展示在用户眼前的内容也相当有限,当展示的内容较多,超出一个屏幕时,用户可通过滚动手势来查看屏幕以外的内容

2) 通过scrollView可以通过手势,放大或者缩小显示的内容

2、UIScrollView常用属性

1)里面内容的大小,也就是可以滚动的大小,模式是0,没有滚动效果

contentSize

2)这个属性能够在UIScrollView的4周增加额外的滚动区域

contentInset

3) 这个属性用来表示UIScrollView滚动的位置

contentOffset

4) 默认是 yes,就是滚动超过边界会反弹有反弹回来的效果。假如是 NO,那么滚动到达边界会立刻停止

bounces

5) 是否分页

pagingEnabled

6) 是否可以滚动

scrollEnabled

7) 滚动时是否显示水平滚动条

showsHorizontalScrollIndicator

8) 滚动时是否显示垂直滚动条

showsVerticalScrollIndicator

9) 滚动条的样式,基本只是设置颜色。总共3个颜色:默认、黑、白

indicatorStyle

10) 默认是 NO,可以在垂直和水平方向同时运动。当值是 YES 时,假如一开始是垂直或者是水平运动,那么接下来会锁定另外一个方向的滚动。 假如一开始是对角方向滚动,则不会禁止某个方向

directionalLockEnabled

10) 让指定的区域显示显示出来

scrollRectToVisible:animate

10)当touch后还没有拖动的时候值是YES,否则是NO

tracking

11) 当内容放大到最大或者最小的时候是YES,否则NO

zoomBouncing

12) 当正在缩放的时候值是YES,否则为NO

zooming

13) 当滚动后,手指放开但是还在继续滚动中。这个时候是 YES,其它时候是 NO

decelerating

14) 设置手指放开后的减速率

decelerationRate

15) 一个浮点数,表示能放最大的倍数

maximumZoomScale

16) 一个浮点数,表示能缩最小的倍数

minimumZoomScale

17) 和 bounces 类似,区别在于:这个效果反映在缩放上面,假如缩放超过最大缩放,那么会反弹效果;假如是 NO,则到达最大或者最小的时候立即停止

bouncesZoom

3、UIScrollView代理方法

创建一个UIScrollView,并在里面放置一张图片

1)scrollView已经滑动

- (void)scrollViewDidScroll:(UIScrollView *)scrollView;

2)视图已经放大或缩小

- (void)scrollViewDidZoom:(UIScrollView *)scrollView;

3)scrollView开始拖动

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;

4)scrollView结束拖动

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;

5)scrollView开始减速(以下两个方法注意与以上两个方法加以区别)

- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView;

6)scrollview减速停止

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;

用法:

if (![scrollView isMemberOfClass:[UITableView class]]) {

int current = scrollView.contentOffset.x / 320;

UIPageControl *pageControl = (UIPageControl *)[self.view viewWithTag:101];

pageControl.currentPage = current;

}

7)返回一个放大或者缩小的视图,要设置最大最小值

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;

8)开始放大或者缩小

- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view

9)缩放结束时

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale;

10)是否支持滑动至顶部

- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView;

11)滑动到顶部时调用该方法

- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView;

一、利用scrollView实现图片的放大缩小

1、设置最大最小缩放倍率

self.maximumZoomScale = 2.5;

self.minimumZoomScale = 1;

2、指定缩放谁

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView

3、双击事件的放大与缩小

- (void)zoomInOrOut:(UITapGestureRecognizer *)tapGesture

{

if (self.zoomScale >= 2.5) {

[self setZoomScale:1 animated:YES];

}else {

CGPoint point = [tapGesture locationInView:self];

[self zoomToRect:CGRectMake(point.x - 40, point.y - 40, 80, 80) animated:YES];

}

}

二、实现类似相册的功能

1、创建一个scrollView,进行配置

2、在scrollView里面放多张能够显示得图片

3、每次翻到下一张图片时要让这上个图片恢复到原比例

int pre = 0;

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

{

int current = scrollView.contentOffset.x / 340;

ImageScrollView *imgScrollView = (ImageScrollView *)[scrollView viewWithTag:pre];

if (imgScrollView.zoomScale > 1) {

imgScrollView.zoomScale = 1;

}

pre = current;

}


(9)

一、UIPickerView(拾取器)的使用  1、UIPickerView控件生成的表格可以提供滚动的轮盘,  2、这些表格表面上类似于标准的UITableView控件,但是他们使用的dataSource和delegate方法有细微的差别二、UIPickerView常用方法      1、获取指定列的行数    - (NSInteger)numberOfRowsInComponent:(NSInteger)component;  2、刷新所有列    - (void)reloadAllComponents;  3、刷新指定的列    - (void)reloadComponent:(NSInteger)component;  4、选择一行    - (void)selectRow:(NSInteger)row inComponent:(NSInteger component    animated:(BOOL)animated;  5、获取指定列当前显示的是第几行    - (NSInteger)selectedRowInComponent:(NSInteger)component;三、UIPickerView常用方法    1、dataSource方法      1)返回列数        - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView      2)返回每一列对应的行数        - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component    2、delegate方法        1)返回显示的文本        - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component        2)当某一列选中的行数发生变化时调用          - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component        3) 设置行高        - (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component        4)设置列宽        - (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component        5)自定义cell        - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view四、练习    1、使用拾取器做城市选择      1)在工程自带的ViewController的viewDidload加入        UIPickerView *pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0,self.view.frame.size.height-300, 414, 300)];        pickerView.backgroundColor = [UIColor grayColor];            [self.view addSubview:pickerView];      运行,什么都没有,因为多少段多少行是通过代理方法来设置的      2)让viewController类遵守两个协议,在viewDidLoad方法里给pickerView挂上代理,并在viewController里实现如下两个代理方法

//返回列数

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {

return 2;

}

//返回每一列中的行数

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {

return 5;

}

运行 选择器里面有两列,每列的数据都是用『?』表示,因为还没有给每列赋值

3)将课件里面的city.plist文件拖到工程中,在viewDidLoad方法里写入如下代码

NSString *path = [[NSBundle mainBundle] pathForResource:@"city" ofType:@"plist"];

//声明一个全局变量dataArray

dataArray = [[NSArray alloc] initWithContentsOfFile:path];

4)将代理方法- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component的内容替换成如下内容

if (component == 0) {

return data.count;

}

NSInteger selectedRow =  [pickerView selectedRowInComponent:component];

NSArray *tempArray = data[selectedRow][@"cities"];

return tempArray.count;

运行 目前还是没有数据,但列数和行数已经做了自动设置

5、给每行设置标题,将如下代理方法写入工程

//返回每个item中的title

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {

if (component == 0) {//第一列

NSDictionary *dic = data[row];

NSString *state = dic[@"state"];

return state;

}

//返回第一列选择的行的索引

NSInteger selectedRow = [pickerView selectedRowInComponent:0];

//取得省级字典

NSDictionary *items = data[selectedRow];

//取得该省下所有的市

NSArray *cities = [items objectForKey:@"cities"];

NSString *cityName = cities[row];

return cityName;

}

运行 每行有标题 但左边的省份变化,右边的城市列表没有跟着变化

6、实现右侧跟着左侧联动

//当某一列选中的行数发生变化时调用

- (void)pickerView:(UIPickerView *)pickerView

didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

if (component == 0) {

//刷新指定列中的行

[pickerView reloadComponent:1];

//选择指定的item

[pickerView selectRow:0 inComponent:1 animated:YES];

}

}

运行 右侧可以跟着左侧联动

7、设置列宽和行高,在工程里添加如下代理方法

- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component {

if (component == 0) {

return 100;

}

return 220;

}

- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{

return 30;

}

8、自定义cell,添加代理方法

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {

if (component == 0) {

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];

view.backgroundColor = [UIColor greenColor];

return view;

}

UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 220, 40)];

view2.backgroundColor = [UIColor redColor];

return view2;

}

运行 只剩色块,而里面却没有内容了,因为这个代理方法执行- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component代理方法将不会再执行

一、UIDatePicker时间拾取器

1、UIDatePicker提供了时间、日期供用户选择

2、UIDataPicker是对UIPickerView做了进一步封装,其外观布局和UIPickerView完全一样

二、UIDatePicker的常用属性

1、初始化显示的date日期

date

2、设置最小日期

minimumDate

3、设置最大日期

maximumDate

4、设置日期的显示样式

datePickerMode

UIDatePickerModeTime 显示时间

UIDatePickerModeDate 显示日期

UIDatePickerModeDateAndTime 显示日期和时间

UIDatePickerModeCountDownTimer 显示时间

5、分钟间隔值

minuteInterval

三、练习

1、日期选择器

1) 新建工程,在ViewController中的viewDidLoad加入如下代码

UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 736-300, 414, 300)];

datePicker.tag = 100;

//最小时间  10年之前 不设置最小时间将没有限定

datePicker.minimumDate = [NSDate dateWithTimeIntervalSinceNow:-60*60*24*365*10];

datePicker.maximumDate = [NSDate date];

//初始化时间为昨天

datePicker.date = [NSDate dateWithTimeIntervalSinceNow:-60*60*24];

//4种显示样式

datePicker.datePickerMode = UIDatePickerModeDate;

[self.view addSubview:datePicker];

运行 体验一下设置最小时间跟没设置最小时间的区别

2)在viewDidLoad中添加如下代码

UIButton *button = [UIButton buttonWithType:UIButtonTypeContactAdd];

button.frame = CGRectMake(100, 100, 50, 50);

[button addTarget:self action:@selector(clickActon) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:button];

3)实现点击事件方法

- (void)clickActon{

UIDatePicker *datePicker = (UIDatePicker *)[self.view viewWithTag:100];

NSDate *date = datePicker.date;

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

[dateFormatter setDateFormat:@"yyyy-MM-dd"];

NSString *dateString = [dateFormatter stringFromDate:date];

NSLog(@"%@",dateString);

}

运行,查看效果

一、日期类简单介绍

对日期我们经常使用到的两个类

1、NSDate,NSDate的对象表示一个具体的时间点

2、NSDateFormatter对象将时间转化为字符串或者反转

二、创建NSDate对象的几种方式以及区别

1、获取到GTM时间(世界标准时间),比中国时间早八个小时

NSDate *data = [NSDate date];

2、从当前GTM时间往后推八个小时的时间,如果为负数就是往前推八个小时的时间

NSTimeInterval timeInterval = 8*60*60;

NSDate *chinaDate = [NSDate dateWithTimeIntervalSinceNow:timeInterval];

3、从计算机时间(1970-01-01 00:00:00)后推八个小时后的时间。

NSDate *since1970Date = [NSDate dateWithTimeIntervalSince1970:timeInterval];

4、从自定义的时间往后推八个小时后的时间。

NSDate *sinceCustomDate = [NSDate dateWithTimeInterval:timeInterval sinceDate:date];

5、从2001-01-01 00:00:00往后推八个小时后的时间。

NSDate *sinceReferenceDate = [NSDate dateWithTimeIntervalSinceReferenceDate:timeInterval];

6、永远不可能到达的一个点

NSDate *futureDate = [NSDate distantFuture];

7、一个无限过去的时间点

NSDate *pastDate = [NSDate distantPast];

三、NSDate对象常用的方法

1、从计算机时间(1970-01-01 00:00:00)到date时间的时间差(秒为单位)

timeIntervalSince1970

2、从(2001-01-01 00:00:00)到date时间的时间差(秒为单位)

timeIntervalSinceReferenceDate

3、从当前时间到date时间的时间差

timeIntervalSinceNow

4、当前时间偏移多少秒后的新时间

dateByAddingTimeInterval

5、两个日期之间的时间差

timeIntervalSinceDate

6、日期的比较

earlierDate//谁早返回谁

laterDate//谁晚返回谁

isEqualToDate//两个日期是否相等

四、日期与字符串的转换

1、日期格式如下:

y  年

F  月份中的周数

E  周几,EEEE星期几

M 表示 月

m 表示 分

H 表示 24小时制

h 表示 12小时制

s 表示 秒

S 表示 毫秒

d  月份中的天数

a  Am/pm

k  一天中的小时数(1-24)

K  am/pm 中的小时数(0-11)

H  一天中的小时数

h  am/pm 中的小时数(1-12)

2、字符串与日期的转换

1)将日期转换为字符串,转换过后就自动换成系统所在时区的时间

[dateFormatter stringFromDate:date]

2)将字符串转化为日期

[dateFormatter dateFromString:str]

--------------------------------------------------------------------

                                                                              未完(接UI控件及方法大集合续)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容