美文网首页
UI控件及方法大集合

UI控件及方法大集合

作者: 小小赵纸农 | 来源:发表于2016-07-10 17:13 被阅读976次

    废话不多说,直接上干货

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

    (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控件及方法大集合续)

    相关文章

      网友评论

          本文标题:UI控件及方法大集合

          本文链接:https://www.haomeiwen.com/subject/mvoljttx.html