iOS UI学习之路05 - 滚动视图

本文详细介绍了UIScrollView的基本概念、特性和常用属性及方法,并深入探讨了UITableView的特性、创建方法、常用属性、方法及其数据源和代理方法。同时,还讲解了自定义UITableViewCell的方法。

UIScrollView

UIScrollView基本概念以及特性

UIScrollView是一个视图,可以滚动,可以显示很多内容,比如常见的照片浏览,可以上下滚动的新闻列表

通过UIScrollView可以实现放大或者缩小

UIScrollView的父类是UIView,子类有:UITextView、UITableView、UICollectionView

UIScrollView创建同UIView一样

fram.size是UIScrollView显示的尺寸,contentSize是内容的尺寸(可以无限大)

常用属性

contentSize    滚动视图的内容尺寸

delegate    代理对象

showsHorizontalScrollIndicator    是否显示水平方向的滚动条

showsVerticalScrollIndicator    是否显示垂直方向的滚动条

pagingEnabled    开启分页效果

bounces    是否有缓冲效果

scrollEnabled    是否可以滚动

contentOffset    偏移量:x或者y方向的内容起点距离ScrollView左边或者顶部的偏移像数

minimumZoomScale    最小缩放倍数

maximumZoomScale    最大缩放倍数

常用方法

视图将要进入拖动    -(void) scrollViewWillBeginDragging:

视图已经滚动    scrollViewDidScroll:

视图将要结束滚动    scrollViewWillEndDragging: withVelocity: targetContentOffset:

视图已经结束拖动    scrollViewDidEndDragging: willDecelerate:

视图将要进入减速    scrollViewWillBeginDecelerating:

视图已经结束减速    scrollViewDidEndDecelerating:

返回放大后UIScrollView里面的子视图    viewForZoomingInScrollview:

UITableView 表视图

表视图基本概念

特性

UITableView有两种风格:UITableViewStylePlain(平铺)和UITableViewStyleGrouped(分组)

UITableView中只有行的概念,没有列的概念

UITableView中每一行就是一个UITableViewCell(单元格)

表视图由:头视图、单元格(组头、行、组尾)、分割线 组成

NSIndexPath 路径索引

UITableView使用NSIndexPath表示每个单元格的位置

section:    单元格所在组索引

row:    单元格所在组中的行索引

表视图的创建

UITableView *tableView = [[UITableView alloc] initWithFrame: CGRectMake(0,20,320,548) style: UITableViewStylePliain];

[self.view addSubViews: tableView];

常用属性

dataSource    数据源委托属性

delegate    代理属性

tableHeaderView    表视图的头视图    类型为UIView

tableFooterView    表视图的尾视图    类型为UIView

allowsMultipleSelectionDuringEditing    设置编辑状态时是多选/移动 还是添加/删除/移动

separatorColor    分割线的颜色

separotarStyle    分割线的样式

rowHeight    单元格的高度,默认为44,也可以通过协议方法设置

indexPathForSelectedRows    类型NSArray<NSIndexPath *> *, 被选中的单元格的IndexPath

常用方法

reloadData    刷新表视图

visibleCells    获取当前已经显示的视图

CellForRowAtIndexPath    获取单元格通过indexPath

ScrollToRowAtIndexPath:    atScrollPosition: animated:    滚动指定的单元格

UITableViewDataSource 委托方法

必要实现

tableView: namberOfRowsInSection:    指定需要创建的单元格个数

tableView: cellForRowAtIndexPath:    创建需要显示的单元格,当需要创建一个单元格时,则调用一次

可选实现

numberOfSectionsInTableView:    设置表视图的组数

tableView: titleForHeaderInSection:    每一组的头视图的标题

tableView: titleForFooterInSection:    每一组的尾视图的标题

UITableViewDelegate 委托方法

tableView: heightForRowAtIndexPath:    设置单元格高度

tableView: heightForHeaderInSection:    设置组的头高度

tableView: heightForFooterInSection:    设置组的尾高度

tableView: viewForHeaderInSection:    设置组的头视图

tableView: viewForFooterInSection:    设置组的尾视图

tableView: didSelectRowAtIndexPath:    单元格被选中后执行

以下为编辑TableView时常用到的委托方法

tableView: editingStyleForRowAtIndexPath:    根据indexPath设置单元格编辑状态时的样式(添加/删除)

tableView: commitEditingStyle: forRowAtIndexPath:    当点击单元格左侧(添加/删除)按钮时调用。commitEditingStyle: 后面的参数表示,当前点击时是添加/删除。

tableView: canMoveRowAtIndexPath:    根据indexPath设置单元格编辑状态时是否可以移动,同"10."的方法成对出现,否则移动按钮不显示

tableView: moveRowAtIndexPath: toIndexPath: 当拖动一个单元格在另一个单元格上松开时调用。提供的参数:tableView 当前视图    sourceIndexPath    源单元格    destinationIndexPath    目标单元格

添加/删除单元格

编辑UITableView时,当UITableView的数据有添加或减少,相应的数据源也要做相应的改变

删除

[tableView: beginUpdates];

[tableView: deleteRowsAtIndexPaths:@[indexPath] withRowsAmimation:……];

[tableView: endUpdates];

添加

insertRowsAtIndexPaths: withRowAnimation:

经验

分割线让其居左顶格

先在tableView加载时设置

separtorInset = UIEdgeInsetsZero;

tablView.layoutMargins = UIEdgeInsetsZero;

然后在cell加载时设置

cell.separatorInset = UIEdgeInsetsZero;

开发项目时要注意方法的版本问题,不符合时需要做判断

重用机制

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

    NSString *identifier = @"cell";    //定义标识符

    //在复用池中查询是否有可用的单元格

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: identifier];

    if(cell = nil){//创建单元格

        cell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: identifier];

}

//设置cell

return cell;

}

自定义UITableViewCell

第一种方式

创建一个继承了UITableViewCell的类TableViewCell1

设置TableViewCell1的一些属性

在ViewController类中直接用TableViewCell1来创建对象

第二种方式

在TableViewCell2.xib文件中设计布局,设计好后关联到TableViewCell2类中

在ViewController类中实现创建行这个委托方法时:

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

{

    static string *identifier = @"cell2";

    TableViewCell2 *cell2 = [tableView dequeReusableCellWithIdentifier: identifier];

    if(!cell2){

        //xib文件中可以添加多个UITableViewCell

NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"TableViewCell2" owner:nil option:nil];

        cell2 = (UITableViewCell2 *)[array lastObject];

        UINib *nib = [UINib nibWithNibName:@"TableViewCell2" bundle:nil];

        [tableView registerNib:nib forHeaderFooterViewReuseIdentifier:identifier];

}

//设置cell2

return cell2;

}

注意

xib文件和控制器要关联好

在xib中设置的高度,只会在xib中显示,但要设置tableView的行高,要么通过tableView.rowHeight设置,要么通过委托方法。

第三种方式

在storyboard中添加一个UITableViewCell,可为自定义也可为系统,然后设计布局,添加控制元素

在ViewController类中实现创建行这个委托方法时:

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

{

    static string *identifier = @"cell3";

    TableViewCell3 *cell3 = [tableView dequeReusable……forIndexPath:indexPath];

//设置cell3

return cell3;

}

注意

系统的TableViewCell在加载storyboard时,已经自动注册了,自定义的TableViewCell则需要手动注册nib/class复用。前者和后者都要设置标识符。

UICollectionView 块滚动视图

概念和特性

布局同UITableView不同,呈现的是一个个方块区域,平铺而成

属性、方法、创建方式都与UITableView相似

常用属性

scrollPirection    collectionView的滑动方向

itemSize    设置item的大小来显示item

minimumInterItemSpacing    设置列间距

minimumLineSpacing    设置水平间距

自定义UICollectionViewCell

同UITableViewCell类似

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值