实现简单表
1.控制器头文件声明遵循的协议:
1 2
   | @interface ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> @end
   | 
 
 
2.视图加载完毕后调整表的顶部位置:
1 2 3 4
   | UITableView *tableView = (id)[self.view viewWithTag:1]; UIEdgeInsets contentInsert = tableView.contentInset; contentInsert.top = 20; [tableView setContentInset:contentInsert];
   | 
 
3.设置表的总行数:
1 2 3 4
   | - (NSInteger)tableView:(UITableView *)tableView  numberOfRowsInSection:(NSInteger)section {   return [self.dwarves count]; }
   | 
 
4.设置表的各行数据(UITableViewCellStyleDefault参数修改表的样式):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   | - (UITableViewCell *)tableView:(UITableView *)tableView          cellForRowAtIndexPath:(NSIndexPath *)indexPath {   static NSString *simpleTableIdentifier = @"SimpleTableIdentifier";
    UITableViewCell *cell =       [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    if (cell == nil) {     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault                                   reuseIdentifier:simpleTableIdentifier];   }
    UIImage *image = [UIImage imageNamed:@"star"];   cell.imageView.image = image;
    cell.textLabel.text = self.dwarves[indexPath.row];   cell.textLabel.font = [UIFont boldSystemFontOfSize:50];
    if (indexPath.row < 7) {     cell.detailTextLabel.text = @"Mr. Disney";   } else {     cell.detailTextLabel.text = @"Mr. Tolkien";   }
    return cell; }
   | 
 
5.设置表的每行缩进:
1 2 3 4
   | - (NSInteger)tableView:(UITableView *)tableView     indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath {   return indexPath.row; }
   | 
 
6.设置表的某一行不能被选择:
1 2 3 4 5 6 7 8
   | - (NSIndexPath *)tableView:(UITableView *)tableView   willSelectRowAtIndexPath:(NSIndexPath *)indexPath {   if (indexPath.row == 0) {     return nil;   } else {     return indexPath;   } }
   | 
 
7.设置表的每行高度:
1 2 3 4
   | - (CGFloat)tableView:(UITableView *)tableView     heightForRowAtIndexPath:(NSIndexPath *)indexPath {   return 70; }
   | 
 
8.当表的某一行被选中后的操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
   | - (void)tableView:(UITableView *)tableView     didSelectRowAtIndexPath:(NSIndexPath *)indexPath {   NSString *rowValue = self.dwarves[indexPath.row];   NSString *message =       [[NSString alloc] initWithFormat:@"You selected %@", rowValue];
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Row Selected!"                                                   message:message                                                  delegate:nil                                         cancelButtonTitle:@"Yes, I Did"                                         otherButtonTitles:nil];
    [alert show];   [tableView deselectRowAtIndexPath:indexPath animated:YES]; }
   | 
 
代码实现定制表视图单元
1.单元格类代码布局:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
   | - (id)initWithStyle:(UITableViewCellStyle)style     reuseIdentifier:(NSString *)reuseIdentifier {   self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];   if (self) {     CGRect nameLabelRect = CGRectMake(0, 5, 70, 15);     UILabel *nameMarker = [[UILabel alloc] initWithFrame:nameLabelRect];
      nameMarker.textAlignment = NSTextAlignmentRight;     nameMarker.text = @"Name:";     nameMarker.font = [UIFont boldSystemFontOfSize:12];     [self.contentView addSubview:nameMarker];
      CGRect colorLabelRect = CGRectMake(0, 26, 70, 15);     UILabel *colorMarker = [[UILabel alloc] initWithFrame:colorLabelRect];
      colorMarker.textAlignment = NSTextAlignmentRight;     colorMarker.text = @"Color:";     colorMarker.font = [UIFont boldSystemFontOfSize:12];     [self.contentView addSubview:colorMarker];
      CGRect nameValueRect = CGRectMake(80, 5, 200, 15);     _nameLabel = [[UILabel alloc] initWithFrame:nameValueRect];     [self.contentView addSubview:_nameLabel];
      CGRect colorValueRect = CGRectMake(80, 25, 200, 15);     _colorLabel = [[UILabel alloc] initWithFrame:colorValueRect];     [self.contentView addSubview:_colorLabel];   }   return self; }
   | 
 
2.定义全局复用的单元格标识:
1
   | static NSString *CellTableIdentifier = @"CellTableIdentifier";
   | 
 
3.视图控制器加载完毕后,注册表单元类:
1 2 3
   | UITableView *tableView = (id)[self.view viewWithTag:1]; [tableView registerClass:[NameAndColorTableViewCell class]     forCellReuseIdentifier:CellTableIdentifier];
   | 
 
4.设置表的总行数:
1 2 3 4
   | - (NSInteger)tableView:(UITableView *)tableView  numberOfRowsInSection:(NSInteger)section {   return [self.computers count]; }
   | 
 
5.设置表的各行数据:
1 2 3 4 5 6 7 8 9 10 11 12 13
   | - (UITableViewCell *)tableView:(UITableView *)tableView          cellForRowAtIndexPath:(NSIndexPath *)indexPath {   NameAndColorTableViewCell *cell =       [tableView dequeueReusableCellWithIdentifier:CellTableIdentifier                                       forIndexPath:indexPath];
    NSDictionary *rowData = self.computers[indexPath.row];
    cell.name = rowData[@"Name"];   cell.color = rowData[@"Color"];
    return cell; }
   | 
 
Nib文件加载实现定制表视图单元
1.视图控制器加载完毕后,从Nib文件中注册表单元类:
1 2 3 4 5
   | UITableView *tableView = (id)[self.view viewWithTag:1]; tableView.rowHeight = 65;
  UINib *nib = [UINib nibWithNibName:@"BIDNameAndColorCell" bundle:nil]; [tableView registerNib:nib forCellReuseIdentifier:CellTableIdentifier];
   | 
 
实现分组分区
1.视图加载完成之后,加载数据:
1 2 3 4 5 6 7 8
   | UITableView *tableView = (id)[self.view viewWithTag:1]; [tableView registerClass:[UITableViewCell class]   forCellReuseIdentifier:SectionTableIdentifier];
  NSString *path = [[NSBundle mainBundle] pathForResource:@"sortednames" ofType:@"plist"];
  self.names = [NSDictionary dictionaryWithContentsOfFile:path]; self.keys = [[self.names allKeys] sortedArrayUsingSelector:@selector(compare:)];
   | 
 
2.设置每个分区的数据个数:
1 2 3 4 5 6
   | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {     NSString *key = self.keys[section];     NSArray *nameSection = self.names[key];     return [nameSection count]; }
   | 
 
3.设置每个分区的标题:
1 2 3 4
   | - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {     return self.keys[section]; }
   | 
 
实现索引分区
1.设置索引标题:
1 2 3
   | - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {     return self.keys; }
  | 
 
2.处理顶端边缘偏移的问题:
1 2 3 4 5
   | if (tableView.style == UITableViewStylePlain) {     UIEdgeInsets contentInset = tableView.contentInset;     contentInset.top = 20;     [tableView setContentInset:contentInset]; }
  | 
 
3.处理状态栏被干扰的问题:
1 2 3 4
   | UIView *barBackground =     [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 20)]; barBackground.backgroundColor = [UIColor colorWithWhite:1.0 alpha:1.0]; [self.view addSubview:barBackground];
   | 
 
实现搜索栏
1.控制器头文件声明遵循的协议:
1 2 3
   | @interface SectionsViewController     : UIViewController <UITableViewDelegate, UITableViewDataSource, UISearchDisplayDelegate> @end
   | 
 
2.添加实例变量保存搜索匹配的名字:
1 2
   | NSMutableArray *filteredNames; UISearchDisplayController *searchController;
   | 
 
3.搜索栏初始化操作:
1 2 3 4 5 6 7
   | filteredNames = [NSMutableArray array]; UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
  tableView.tableHeaderView = searchBar; searchController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self]; searchController.delegate = self; searchController.searchResultsDataSource = self;
   | 
 
4.加载搜索结果:
1 2 3 4 5
   | - (void)searchDisplayController:(UISearchDisplayController *)controller   didLoadSearchResultsTableView:(UITableView *)tableView {   [tableView registerClass:[UITableViewCell class]       forCellReuseIdentifier:SectionTableIdentifier]; }
   | 
 
5.需重新加载搜索结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
   | - (BOOL)searchDisplayController:(UISearchDisplayController *)controller     shouldReloadTableForSearchString:(NSString *)searchString {   [filteredNames removeAllObjects];   if (searchString.length > 0) {     NSPredicate *predicate =         [NSPredicate predicateWithBlock:^BOOL(NSString *name, NSDictionary *b) {           NSRange range =               [name rangeOfString:searchString options:NSCaseInsensitiveSearch];           return range.location != NSNotFound;         }];     for (NSString *key in self.keys) {       NSArray *matches =           [self.names[key] filteredArrayUsingPredicate:predicate];       [filteredNames addObjectsFromArray:matches];     }   }   return YES; }
   | 
 
6.设置分区索引的颜色:
1 2 3
   | tableView.sectionIndexBackgroundColor = [UIColor blackColor]; tableView.sectionIndexTrackingBackgroundColor = [UIColor darkGrayColor]; tableView.sectionIndexColor = [UIColor whiteColor];
   |