xib中view与file·s· owner关联
xib中tableview的datasource和tableview关联
xib中tableview的delegate和tableview关联
上代码
.h文件
#import <UIKit/UIKit.h>
@interface EXTVV2ViewController : UIViewController<UITableViewDelegate,UITableViewDataSource>
@end
.m文件
//
// 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