在開發app中,經常會使用到UITableView,今天無聊做了一個demo,UITableView顯示索引。 顯示索引實現的委託方法主要是:
//返回section的個數
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
//返回索引數組
-(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
//返回每個索引的內容
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
//響應點擊索引時的委託方法
-(NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
.h文件:
1
2
3
4
5
|
#import
<UIKit/UIKit.h> @interface
CContactListViewController : UITableViewController @end |
.m文件:
//
//
CContactListViewController.m
//
Contact
//
//
Created by Carl on 13-6-26.
//
Copyright (c) 2013年 contact..com. All rights reserved.
//
#import
"CContactListViewController.h"
@interface
CContactListViewController ()
@property
NSMutableArray * dataSource, * dataBase;
@end
@implementation
CContactListViewController
-
(id)initWithStyle:(UITableViewStyle)style
{
self
= [super initWithStyle:style];
if
(self) {
//
Custom initialization
}
return
self;
}
-
(
void
)viewDidLoad
{
[super
viewDidLoad];
//
Uncomment the following line to preserve selection between presentations.
//
self.clearsSelectionOnViewWillAppear = NO;
//
Uncomment the following line to display an Edit button in the navigation bar for this view controller.
//
self.navigationItem.rightBarButtonItem = self.editButtonItem;
self.navigationItem.rightBarButtonItem
= self.editButtonItem;
UISearchBar
* searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 0)];
searchBar.translucent
= YES;
searchBar.barStyle
= UIBarStyleBlackTranslucent;
searchBar.showsCancelButton
= YES;
[searchBar
sizeToFit];
[self.tableView
setTableHeaderView:searchBar];
//改變索引的顏色
self.tableView.sectionIndexColor
= [UIColor blueColor];
//改變索引選中的背景顏色
self.tableView.sectionIndexTrackingBackgroundColor
= [UIColor grayColor];
//索引數組
_dataSource
= [[NSMutableArray alloc] init] ;
//tableview
數據源
_dataBase
= [[NSMutableArray alloc] init] ;
//初始化數據
for
(
char
c =
'A'
;
c <=
'Z'
;
c++ )
{
[_dataSource
addObject:[NSString stringWithFormat:@
"%c"
,c]];
[_dataBase
addObject:[NSString stringWithFormat:@
"%c"
,c]];
[_dataBase
addObject:[NSString stringWithFormat:@
"%c"
,c]];
[_dataBase
addObject:[NSString stringWithFormat:@
"%c"
,c]];
}
}
-(
void
)viewWillAppear:(
BOOL
)animated
{
[super
viewWillAppear:animated];
NSLog(@
"viewWillAppear"
);
}
-(
void
)viewDidAppear:(
BOOL
)animated
{
NSLog(@
"viewDidAppear"
);
[super
viewDidAppear:animated];
//取消選中的cell
NSArray
* indexPaths = [self.tableView indexPathsForSelectedRows];
for
(NSIndexPath
* indexPath in indexPaths)
{
[self.tableView
deselectRowAtIndexPath:indexPath animated:YES];
}
}
-
(
void
)didReceiveMemoryWarning
{
[super
didReceiveMemoryWarning];
//
Dispose of any resources that can be recreated.
}
#pragma
mark - Table view data source
//返回索引數組
-(NSArray
*)sectionIndexTitlesForTableView:(UITableView *)tableView
{
return
_dataSource;
}
//響應點擊索引時的委託方法
-(NSInteger)tableView:(UITableView
*)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
{
NSInteger
count = 0;
NSLog(@
"%@-%d"
,title,index);
for
(NSString
*character in _dataSource)
{
if
([character
isEqualToString:title])
{
return
count;
}
count
++;
}
return
0;
}
//返回section的個數
-
(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
//
Return the number of sections.
return
[_dataSource count];
}
//返回每個索引的內容
-(NSString
*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
return
[_dataSource objectAtIndex:section];
}
//返回每個section的行數
-
(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return
3;
}
//cell內容
-
(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static
NSString *CellIdentifier = @
"Cell"
;
UITableViewCell
*cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
if
(cell
== nil)
{
cell
= [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
cell.textLabel.text
= [_dataBase objectAtIndex:indexPath.section * 3 + indexPath.row];
return
cell;
}
//
Override to support conditional editing of the table view.
-
(
BOOL
)tableView:(UITableView
*)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
//
Return NO if you do not want the specified item to be editable.
return
YES;
}
-(UITableViewCellEditingStyle)tableView:(UITableView
*)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
return
UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert;
}
#pragma
mark - Table view delegate
-
(
void
)tableView:(UITableView
*)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
}
@end