UI整理-----part3--UITableView

1.plist文件

(1)plist文件是iOS里最简单的一个数据本地化存储方式,我们可以将数据写成数据结构存储到plist文件中永久保存。

(2)通过 [[NSBundlemainBundle] pathForResource:@"myPlist"ofType:@"plist"] 可以获取plist文件的存储路径

2.tableView基本知识

(1)tableView的两种风格:UITableViewStylePlain UITableViewStyleGroup

(2)UITableView中每行数据都是一个UITableViewCell,在其内部有一个UIView控件(contentView,作为其他元素的父控件),两个UIlabel控件(textLabel、detailTextLabel),一个UIImage控件(imageView),分别用于容器、显示内容、详情和图片。

(3)UITableViewCell的风格:

typedefNS_ENUM(NSInteger, UITableViewCellStyle) {

UITableViewCellStyleDefault,    左侧显示textLabel,不显示detailTextLabel,imageView可选(显示在最左边)

UITableViewCellStyleValue1,     左侧显示textLabel,右侧显示detailTextLabel,(默认蓝色)imageView可选(显示在最左边)

UITableViewCellStyleValue2,     左侧依次显示textLabel和detailTextLabel,imageView可选(显示在最左边)

UITableViewCellStyleSubtitle     左上方显示textLabel,左下方显示detailTextLabel(默认灰色),imageView可选(显示在最左边)

};

3.UITableViewDataSource:对于数据源控件,除了代理还有一个数据源属性,通过它和外界进行数据交互。对于UITableView设置完dataSource后实现UITableViewDataSource协议,其中包括——

<1>返回分组数:- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;

<2>返回每组行数:- (NSInteger)tableView:(UITableView *)tableViewnumberOfRowsInSection:(NSInteger)section{}

<3>返回每行的单元格:- (UITableViewCell *)tableView:(UITableView *)tableViewcellForRowAtIndexPath:(NSIndexPath *)indexPath;

<4>返回每组头标题名称:- (NSString *)tableView:(UITableView *)tableViewtitleForHeaderInSection:(NSInteger)section;

<5>返回每组尾部说明:- (NSString *)tableView:(UITableView *)tableViewtitleForFooterInSection:(NSInteger)section;

<6>返回每组标题索引:- (nullableNSArray<NSString *> *)sectionIndexTitlesForTableView:(UITableView *)tableView;

生成单元格的方法并不是一次全部调用,而是只会生产当前显示在界面的单元格行数+1,当用户滚动操作时再显示其它单元格。

4.UITableViewDelegate:代理实现的方法:

<1>设置行高:

设置分组标题内容高度:- (CGFloat)tableView:(UITableView *)tableViewheightForHeaderInSection:(NSInteger)section

设置每个cell的高度:- (CGFloat)tableView:(UITableView *)tableViewheightForRowAtIndexPath:(nonnullNSIndexPath *)indexPath

<2>监听点击:- (void)tableView:(UITableView *)tableViewdidSelectRowAtIndexPath:(NSIndexPath *)indexPath

<3>单元格的复用:通过在创建单元格之前首先以标识符为参考到复用池中查找是否存在cell对象,有就复用,没有则创建: - (nullable__kindofUITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier;

5.UITableView右侧图标 ——访问器

<1>设置访问器:@property (nonatomic) UITableViewCellAccessoryType    accessoryType;

    typedefNS_ENUM(NSInteger, UITableViewCellAccessoryType) {

UITableViewCellAccessoryNone,                                                         不显示任何图标

UITableViewCellAccessoryDisclosureIndicator,                                     跳转指示图标

UITableViewCellAccessoryDetailDisclosureButton,                                内容详情图标和跳转指示图标

UITableViewCellAccessoryCheckmark,                                                勾选图标

UITableViewCellAccessoryDetailButton                                                内容详情图标

};

<2> UITableViewCell创建的cell可以通过 [cell.contentView addSubview:<#(nonnullUIView *)#>] 方法在cell上添加view

6.MVC模式:在iOS中多数数据源实现的是视图(view)控件上都有一个dataSource属性用于和控制器(controller)交互,而数据来源我们一般会以数据类型(Model)的形式进行定义。即   model→
controller↔view

7.编辑状态

(1)如果定义UITableViewCell,在tableViewCell的contentView的最左边放UIImageView,当cell选中的时候,cell的contentView向右移动,让UIImageView显示出来,只要实现自定义的cell中 - (void)setEditing:(BOOL)editinganimated:(BOOL)animated; 可将其置于编辑模式

(2)通过按钮实现可编辑与非编辑状态转换:

- (IBAction)buttonAction:(UIButton *)sender {

sender.selected = !sender.selected;

[_tableView setEditing:!_tableView.editing animated:YES];

if (_tableView.editing == NO) {

[_tableView reloadData];

}

}

(3)数据源方法中通过以下方法,改变单元格是否可编辑:

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

{

if (indexPath.row == 0) {

return NO;    //不可编辑

}

return YES;

}

(4)UITableView的delegate里有设置编辑模式下按钮的样式:

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

{

if (indexPath.row == 1) {

return UITableViewCellEditingStyleInsert;

}

return UITableViewCellEditingStyleDelete;

/*

共有三种模式,即:

typedef NS_ENUM(NSInteger, UITableViewCellEditingStyle) {

UITableViewCellEditingStyleNone,     无编辑

UITableViewCellEditingStyleDelete,   删除编辑

UITableViewCellEditingStyleInsert     插入编辑

};

*/

}

(5)按照点击实现新增和删减的方法(dataSource中的方法)

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

if (editingStyle == UITableViewCellEditingStyleInsert) {

[_dataList insertObject:@""atIndex:indexPath.row + 1];    //NSMutableArray *_dataList;

NSIndexPath *indexP = [NSIndexPath indexPathForRow:indexPath.row + 1 inSection:indexPath.section];   //构造插入位置,引用索引

NSArray *array = @[indexP];

[_tableView insertRowsAtIndexPaths:array withRowAnimation:UITableViewRowAnimationLeft];

}elseif (editingStyle == UITableViewCellEditingStyleDelete){

[_dataList removeObjectAtIndex:indexPath.row];

[_tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];

//如果上面两个隐藏其一,都会崩

}

}

 

8.单元格自适应

-(CGFloat)tableView:(UITableView *)tableViewheightForRowAtIndexPath:(NSIndexPath *)indexPath

{

NSString *text = [self.news DataobjectAtIndex:indexPath.row];

CGSizesize = [text sizeWithFont:[UIFontsystemFontOfSize:20] constrainedToSize:CGSizeMake(350, 999999) lineBreakMode:NSLineBreakByWordWrapping];

returnsize.height + 100;

NSLineBreakByTruncatingHead         以单词为单位换行,以字符为单位截断

NSLineBreakByClipping                  以字符为单位换行,以字符为单位截断

NSLineBreakByCharWrapping        以单词为单位换行,以字符为单位截断

}

9.UITableViewCell的相关

(1)通过UITableViewCell的contentView添加子视图,在UITableViewCell上有一个透明的子视图叫contentView,可以通过向contentView上 加载视图来定制单元格,Cell的contentView比Cell少一个像素,UITableViewCell 有个 Separator 高度为1。如果在TableView中设置Separator为None,那么Cell的contentView高度就会和 Cell高度一致了。

10.UIRefreshControl:iOS6之后,可以为tableView添加一个UIRefreshControl,系统自动给其在所在进行放置。

    //1.创建下拉刷新控件

UIRefreshControl *refreshC = [[UIRefreshControlalloc] init];

//2.增加title

refreshC.attributedTitle = [[NSAttributedStringalloc] initWithString:@"下拉刷新"];

//3.增加一个点击事件

[refreshCaddTarget:selfaction:@selector(buttonAction:) forControlEvents:UIControlEventValueChanged];

//控件的父类是UIView

UIButton *button = [UIButtonbuttonWithType:UIButtonTypeContactAdd];

button.frame = CGRectMake(100, 10, 30, 30);

[buttonaddTarget:selfaction:@selector(a:) forControlEvents:UIControlEventTouchUpInside];

[refreshCaddSubview:button];

[tableViewaddSubview:refreshC];

时间: 2024-08-29 02:13:00

UI整理-----part3--UITableView的相关文章

iOS开发UI篇—实现UItableview控件数据刷新

iOS开发UI篇—实现UItableview控件数据刷新 一.项目文件结构和plist文件 二.实现效果 1.说明:这是一个英雄展示界面,点击选中行,可以修改改行英雄的名称(完成数据刷新的操作). 运行界面: 点击选中行: 修改数据后自动刷新: 三.代码示例 数据模型部分: YYheros.h文件 // // YYheros.h // 10-英雄展示(数据刷新) // // Created by apple on 14-5-29. // Copyright (c) 2014年 itcase. A

jQuery Easy UI整理笔记目录

jQuery Easy UI整理笔记目录 ps:最近对Easy UI比较感兴趣,打算系统的学习一下,前面基础部分的东西很简单,都是参照API去写的,例子也就是随便举的,没有列举项目中的实际应用. 打算基础部分后面的知识多投入点时间,多与项目中的实际相结合一些,也尽量多想象出一些应用场景. 计划最慢每周更新一篇文章. 一.基础组件部分 1. jQuery Easy UI的使用 2. jQuery Easy UI Draggable(拖动)组件 3. jQuery Easy UI Droppable

详细整理:UITableView优化技巧

最近在微博上看到一个很好的开源项目VVeboTableViewDemo,是关于如何优化UITableView的.加上正好最近也在优化项目中的类似朋友圈功能这块,思考了很多关于UITableView的优化技巧,相信这块是难点也是痛点,所以决定详细的整理下我对优化UITableView的理解. UITableView作为iOS开发中最重要的控件之一,其中的实现原理很是考究.Apple在这块的优化水平直接决定了iOS的体验能甩安卓几条街,哈哈,扯淡扯多了...好了,废话不多说,直接进入主题.首先来谈谈

WEB UI 整理

当下对于网站前段开发人员来说,很少有人不使用一些JS框架或者WEB UI库,因此这些可以有效提高网站前段开发速度,并且能够统一开发环境,对于不同浏览器的兼容性也不需要程序员操心,有了这些优点,当然大家都会使用这些框架或库. 本文整理了国内外最全面和主流的JS框架与WEB UI库,里面有许多人已经十分熟悉,比如JQUERY.当然也有很多是陌生的,可以通过本文了解他们各自的优缺点,或许你能找到更好用的也说不定! 几乎所有的富 Web 应用都基于一个或多个 Web UI 库或框架,这些 UI 库与框架

[转] 详细整理:UITableView优化技巧

原文:http://www.cocoachina.com/ios/20150602/11968.html 最近在微博上看到一个很好的开源项目VVeboTableViewDemo,是关于如何优化UITableView的.加上正好最近也在优化项目中的类似朋友圈功能这块,思考了很多关于UITableView的优化技巧,相信这块是难点也是痛点,所以决定详细的整理下我对优化UITableView的理解. UITableView作为iOS开发中最重要的控件之一,其中的实现原理很是考究.Apple在这块的优化

OS开发UI篇—使用UItableview完成一个简单的QQ好友列表

本文转自:http://www.cnblogs.com/wendingding/p/3763330.html 一.实现效果             二.实现代码 1.数据模型部分 YYQQGroupModel.h文件 1 // 2 // YYQQGroupModel.h 3 // 02-QQ好友列表(基本数据的加载) 4 // 5 // Created by apple on 14-5-31. 6 // Copyright (c) 2014年 itcase. All rights reserve

UI第九讲.UITableView表视图创建,表视图的重用机制,表视图的相关配置方法

一.UITableView表视图创建 1>.基本属性: UITableView继承自UIScrollView,所以可以滚动          表视图的每一条数据都是显示在UITableViewCell对象中          表视图可以分区显示数据,每个分区称为一个section,每一行称为row,编号都是从0始 2>.重要用法: 最重要的是两个代理方法 <UITableViewDelegate,UITableViewDataSource>(其中必须实现的是 numberOfRow

iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(二)

一.实现效果             二.实现代码 1.数据模型部分 YYQQGroupModel.h文件 1 // 2 // YYQQGroupModel.h 3 // 02-QQ好友列表(基本数据的加载) 4 // 5 // Created by apple on 14-5-31. 6 // Copyright (c) 2014年 itcase. All rights reserved. 7 // 8 9 #import <Foundation/Foundation.h> 10 11 @i

IOS开发——UI进阶篇—UITableView,索引条,汽车数据展示案例

一.什么是UITableView 在iOS中,要实现展示列表数据,最常用的做法就是使用UITableViewUITableView继承自UIScrollView,因此支持垂直滚动,而且性能极佳 UITableView的两种样式UITableViewStylePlainUITableViewStyleGrouped 二.如何展示数据 UITableView需要一个数据源(dataSource)来显示数据 UITableView会向数据源查询一共有多少行数据以及每一行显示什么数据等 没有设置数据源的