您的位置:首页 > 产品设计 > UI/UE

IOS UITableView详细使用

2015-05-06 08:55 411 查看
.h文件

[cpp] view
plaincopyprint?

#import <UIKit/UIKit.h>

@interface EXTVV2ViewController : UIViewController<UITableViewDelegate,UITableViewDataSource>

@end

.m文件

[cpp] view
plaincopyprint?

//

// EXTVV2ViewController.m

// ExerciseTableViewV2

//

// Created by hxl on 13-5-20.

// Copyright (c) 2013年 xiaolei.hu. All rights reserved.

//

/*

UITableView

Tasks

//初始化UITableView对象

Initializing a UITableView Object

– initWithFrame:style:

- (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style

//配置UITableView

Configuring a Table View

//tableView的style

//UITableViewStylePlain或者UITableViewStyleGrouped,2者选1

style property

@property(nonatomic, readonly) UITableViewStyle style

//当前section有多少行(此方法必须实现)

– numberOfRowsInSection:

- (NSInteger)numberOfRowsInSection:(NSInteger)section

//当前section的标示

//当前tableView里有多少section,默认为1

– numberOfSections

- (NSInteger)numberOfSections

//行高

rowHeight property

separatorStyle property

separatorColor property

//tableview的背景

backgroundView property

//创建cell

Creating Table View Cells

– registerNib:forCellReuseIdentifier:

– registerClass:forCellReuseIdentifier:

– dequeueReusableCellWithIdentifier:forIndexPath:

– dequeueReusableCellWithIdentifier:

Accessing Header and Footer Views

– registerNib:forHeaderFooterViewReuseIdentifier:

– registerClass:forHeaderFooterViewReuseIdentifier:

– dequeueReusableHeaderFooterViewWithIdentifier:

tableHeaderView property

tableFooterView property

sectionHeaderHeight property

sectionFooterHeight property

– headerViewForSection:

– footerViewForSection:

Accessing Cells and Sections

– cellForRowAtIndexPath:

– indexPathForCell:

– indexPathForRowAtPoint:

– indexPathsForRowsInRect:

– visibleCells

– indexPathsForVisibleRows

Scrolling the Table View

– scrollToRowAtIndexPath:atScrollPosition:animated:

– scrollToNearestSelectedRowAtScrollPosition:animated:

Managing Selections

– indexPathForSelectedRow

– indexPathsForSelectedRows

– selectRowAtIndexPath:animated:scrollPosition:

– deselectRowAtIndexPath:animated:

allowsSelection property

allowsMultipleSelection property

allowsSelectionDuringEditing property

allowsMultipleSelectionDuringEditing property

Inserting, Deleting, and Moving Rows and Sections

– beginUpdates

– endUpdates

– insertRowsAtIndexPaths:withRowAnimation:

– deleteRowsAtIndexPaths:withRowAnimation:

– moveRowAtIndexPath:toIndexPath:

– insertSections:withRowAnimation:

– deleteSections:withRowAnimation:

– moveSection:toSection:

Managing the Editing of Table Cells

editing property

– setEditing:animated:

Reloading the Table View

– reloadData

– reloadRowsAtIndexPaths:withRowAnimation:

– reloadSections:withRowAnimation:

– reloadSectionIndexTitles

Accessing Drawing Areas of the Table View

– rectForSection:

– rectForRowAtIndexPath:

– rectForFooterInSection:

– rectForHeaderInSection:

Managing the Delegate and the Data Source

dataSource property

delegate property

Configuring the Table Index

sectionIndexMinimumDisplayRowCount property

sectionIndexColor property

sectionIndexTrackingBackgroundColor property

*/

#import "EXTVV2ViewController.h"

@interface EXTVV2ViewController ()

@property (nonatomic) NSMutableArray *listData;

@property (nonatomic) IBOutlet UITableView* myTableView;//在xib中与tableview控件关联

@property (nonatomic) IBOutlet UISwitch* mySwitch;//在xib中与switch控件关联

-(IBAction)switchEditModel:(UISwitch*)sender;//在xib中与switch控件的事件关联

@end

@implementation EXTVV2ViewController

@synthesize listData;

@synthesize myTableView;

@synthesize mySwitch;

- (void)viewDidLoad

{

[superviewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

[selfsetListData:[selfcreateData:26sectionRowLength:10stringLength:6]];

}

- (void)didReceiveMemoryWarning

{

[superdidReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

//指定有多少个分区(Section),默认为1

/*

1.此处根据二维数组外层的count获取section数量

此时已有count个section被创建

*/

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

return [self.listDatacount];

}

//指定各个分区中有多少行,默认为1。

/*

2.此处根据1设置的section数量获取数组二维内层长度(row数量)ps:section会根据你设置的最大值自动递增

此时section对应的count个cell被创建

*/

- (NSInteger) tableView: (UITableView *) tableView

numberOfRowsInSection: (NSInteger) section {

NSInteger rowCount = 0;

//NSLog(@"section = %d",section);0/1/2

if (section < self.listData.count) {

rowCount = [self.listData[section]count];

}

return rowCount;

}

//设置每行调用的cell

/*

3.此处根据1设置的section数量,和2设置的row数量获取数组内容并填充cell

对1、2创建的容器进行填充,section和row就是二维数组的下标

*/

- (UITableViewCell *) tableView: (UITableView *) tableView

cellForRowAtIndexPath: (NSIndexPath *) indexPath

{

/*

indexPath 索引路径

property:

row:table view 中

item:collection view中

section:table/collection view中

method

//collection view中

+ (NSIndexPath *)indexPathForItem:(NSInteger)item inSection:(NSInteger)section

//table view 中

+ (NSIndexPath *)indexPathForRow:(NSInteger)row inSection:(NSInteger)section

*/

//产生一个静态标示(每个cell形式相同可用)

//static NSString * TableSampleIdentifier = @ "TableSampleIdentifier";

//每个cell形式不相同需要不同标示

NSString * TableSampleIdentifier = [[NSStringalloc]initWithFormat:@"CMainCell%d", indexPath.row];

//通过标示符获取一个cell对象(dequeueReusableCellWithIdentifier=>系统请求的回调函数)

UITableViewCell * cell = [tableViewdequeueReusableCellWithIdentifier:

TableSampleIdentifier];

//如果未获取到cell对象,创建新的cell对象,并赋予标示符

if (cell == nil) {

cell = [[UITableViewCellalloc]

initWithStyle:UITableViewCellStyleDefault

reuseIdentifier: TableSampleIdentifier];

}

NSString* cellText = nil;

if (indexPath.section <self.listData.count) {

NSArray* rowArray = self.listData[indexPath.section];

if ([indexPath row] < rowArray.count) {

cellText = rowArray[indexPath.row];

}

}

cell.textLabel.text = cellText;

return cell;

}

//设置每个section显示的Title

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

{

NSString* title = nil;

if (section < self.listData.count) {

NSArray* rowArray = self.listData[section];

if (rowArray.count >0) {

//将每个section的第一行作为title是惯例

title = rowArray[0];

}

}

//截取首字母

return [titlesubstringToIndex:1];

}

//设置tableview每行的title(右侧索引)

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{

//initWithCapacity初始化数组时候指定长度

NSMutableArray* indexTitleArray = [[NSMutableArrayalloc]initWithCapacity:[self.listDatacount]];

//循环外围数组(section个数)

for (UInt16 i =0; i < [self.listDatacount]; i++) {

NSArray* rowArray = self.listData[i];

//判断section下的数据行是否大于0

if (rowArray.count >0) {

NSString* titleStr = rowArray[0];

//title长度超过3截取字符串

if (titleStr.length >1) {

titleStr = [titleStr substringToIndex:1];

}

[indexTitleArray addObject:titleStr];

}

}

//arrayWithArray产生一个新数组并释放原来的数组

return [NSArrayarrayWithArray:indexTitleArray];

}

//点击右侧索引时响应跳转到那个section的事件

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index

{

return index;

}

//设置选中Cell的响应事件

/*

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

{

[tableView deselectRowAtIndexPath:indexPath animated:YES];//选中后的反显颜色即刻消失

}

*/

//选中之前执行

-(NSIndexPath*)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

return indexPath;

}

//设置划动cell是否出现del按钮

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

{

return YES;

}

//设置删除时编辑状态

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

{

//删除元素的操作

if (editingStyle ==UITableViewCellEditingStyleDelete)

{

//删除数据

[self.listData[indexPath.section]removeObjectAtIndex:indexPath.row];

//删除元素

[tableView deleteRowsAtIndexPaths:[NSMutableArrayarrayWithObjects:indexPath,nil]withRowAnimation:UITableViewRowAnimationTop];

}

}

//选中cell后触发的事件

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

{

//设置选中的样式,4种风格 UITableViewCellAccessoryCheckmark UITableViewCellAccessoryDetailDisclosureButton

//UITableViewCellAccessoryDisclosureIndicator UITableViewCellAccessoryNone

UITableViewCell *cellView = [tableView cellForRowAtIndexPath:indexPath];

if (cellView.accessoryType ==UITableViewCellAccessoryNone) {

cellView.accessoryType=UITableViewCellAccessoryCheckmark;

}

else {

cellView.accessoryType =UITableViewCellAccessoryNone;

[tableView deselectRowAtIndexPath:indexPathanimated:YES];

}

//弹出框

NSString *cellSelected=[self.listData[indexPath.section]objectAtIndex:indexPath.row];

//indexPath.row得到选中的行号,提取出在数组中的内容。

UIAlertView *myAlertView;

myAlertView = [[UIAlertViewalloc]initWithTitle:@"你选中了:" message:cellSelected delegate:selfcancelButtonTitle:@"ok"otherButtonTitles:nil];

//点击后弹出该对话框。

[myAlertView show];

}

//是否能移动

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

return YES;

}

//移动操作

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

{

if (sourceIndexPath != destinationIndexPath) {

id object = [self.listData[sourceIndexPath.section]objectAtIndex:sourceIndexPath.row];

[self.listData[sourceIndexPath.section]removeObjectAtIndex:sourceIndexPath.row];

if (destinationIndexPath.row > [self.listData[destinationIndexPath.section]count]) {

[self.listData[destinationIndexPath.section]addObject:object];

}

else {

[self.listData[destinationIndexPath.section]insertObject:objectatIndex:destinationIndexPath.row];

}

}

}

//单元格返回的编辑风格,包括删除 添加和默认 和不可编辑三种风格

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

//{

//return UITableViewCellEditingStyleDelete;

//return UITableViewCellEditingStyleNone;

//return UITableViewCellEditingStyleInsert;

//}

//switc按钮事件

-(IBAction)switchEditModel:(UISwitch*)sender

{

//self.view.subview所有子视图,包括tableview等

//是否开启编辑模式

if(sender.on) {

[self.myTableViewsetEditing:YESanimated:YES];

} else {

[self.myTableViewsetEditing:NOanimated:YES];

}

}

//生成随机字符串

- (NSString *) createRandString:(NSInteger)stringLength perStr:(UInt16)pstr{

UInt16 seed = 0;

//97-122小写英语

NSMutableString *str = [[NSMutableStringalloc]initWithFormat:@"%c", pstr];

for(UInt16 i = 0; i < stringLength; i++) {

seed = (arc4random() % 26) + 97;

[str appendFormat:@"%c", seed];

}

return [NSStringstringWithString:str];

}

- (NSMutableArray *) createData:(NSInteger)sectionLength sectionRowLength:(NSInteger)row stringLength:(NSInteger)length{

NSMutableArray *sectionData = [[NSMutableArrayalloc]initWithCapacity:sectionLength];

for (UInt16 i =0; i < sectionLength ; i++) {

NSMutableArray* rowData = [[NSMutableArrayalloc]initWithCapacity:row];

for (UInt16 j =0; j < row; j++) {

[rowData addObject:[selfcreateRandString:lengthperStr:i +97]];

}

[sectionData addObject:rowData];

}

return sectionData;

}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: