IPhone Dev Notes - 5 - 简单的表视图

本文通过多个示例展示了如何使用 iOS 中的 UITableView 控件进行各种操作,包括初始化数据源、配置单元格、实现代理方法等,为开发者提供了丰富的代码实践案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



//

//  test10ViewController.h

//  test10

//

//  Created by lily bear on 12-2-13.

//  Copyright 2012 lily. All rights reserved.

//


#import<UIKit/UIKit.h>


@interface test10ViewController :UIViewController <UITableViewDelegate,UITableViewDataSource>{

    NSArray *listData;

}


@property (nonatomic,retain)NSArray *listData;


@end



//

//  test10ViewController.m

//  test10

//

//  Created by lily bear on 12-2-13.

//  Copyright 2012 lily. All rights reserved.

//


#import"test10ViewController.h"


@implementation test10ViewController


@synthesize listData;


- (void)dealloc

{

    [listDatarelease];

    [superdealloc];

}


- (void)didReceiveMemoryWarning

{

   // Releases the view if it doesn't have a superview.

    [superdidReceiveMemoryWarning];

    

   // Release any cached data, images, etc that aren't in use.

}


#pragma mark - View lifecycle


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.

- (void)viewDidLoad

{

   NSArray *array = [[NSArrayalloc]initWithObjects:@"Sleepy",@"Sneezy",@"Bashful",@"Happy",@"Doc",@"Grumpy",@"Dopey",@"Thorin",@"Dorin",@"Nori",@"Ori",@"Balin",@"Dwalin",@"Fili",@"Kili",@"Oin",@"Gloin",@"Bifur",@"Bofur",@"Bombur",nil];

    self.listData = array;

    [array release];

    [superviewDidLoad];

}


- (void)viewDidUnload

{

    [superviewDidUnload];

   // Release any retained subviews of the main view.

   // e.g. self.myOutlet = nil;

    self.listData = nil;

}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

   // Return YES for supported orientations

    return (interfaceOrientation == UIInterfaceOrientationPortrait);

}


#pragma mark -

#pragma mark Table View Data Source Methods

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

    return [self.listDatacount];

}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    static NSString *SimpleTableIdentifier =@"SimpleTableIdentifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];

    if(cell == nil){

        cell = [[[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier: SimpleTableIdentifier]autorelease];

    }

    

    UIImage *image = [UIImage imageNamed:@"star.png"];

    cell.imageView.image = image;

    

    NSUInteger row = [indexPath row];

    cell.textLabel.text = [listDataobjectAtIndex:row];

    cell.textLabel.font = [UIFont boldSystemFontOfSize:50];

    

    if(row < 7)

        cell.detailTextLabel.text =@"Mr.Disney";

    else

        cell.detailTextLabel.text =@"Mr.Tolkien";

    

    return cell;

}


#pragma mark -

#pragma mark Table Delegate Methods

/*

- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath{    NSUInteger row = [indexPath row];

    return row;

}*/



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

    NSUInteger row = [indexPath row];

    NSString *rowValue = [listData objectAtIndex:row];

    

    NSString *message = [[NSString alloc] initWithFormat:@"You selected %@", rowValue];

   UIAlertView *alert = [[UIAlertViewalloc]initWithTitle:@"Row Selected!"message:messagedelegate:nilcancelButtonTitle:@"Yes, I Did"otherButtonTitles:nil];

    [alert show];

    

    [message release];

    [alert release];

    [tableViewdeselectRowAtIndexPath:indexPathanimated:YES];

}


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

    return 70;

}


@end


//

//  test11ViewController.h

//  test11

//

//  Created by lily bear on 12-2-14.

//  Copyright 2012 lily. All rights reserved.

//


#import<UIKit/UIKit.h>

#define kNameValueTag1

#define KColorValueTag2


@interface test11ViewController :UIViewController <UITableViewDataSource,UITableViewDataSource>{

    NSArray *computers;

}


@property (nonatomic,retain) NSArray *computers;


@end


//

//  test11ViewController.m

//  test11

//

//  Created by lily bear on 12-2-14.

//  Copyright 2012 lily. All rights reserved.

//


#import"test11ViewController.h"


@implementation test11ViewController


@synthesize computers;


- (void)dealloc

{

    [computersrelease];

    [superdealloc];

}


- (void)didReceiveMemoryWarning

{

   // Releases the view if it doesn't have a superview.

    [superdidReceiveMemoryWarning];

    

   // Release any cached data, images, etc that aren't in use.

}


#pragma mark - View lifecycle



// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.

- (void)viewDidLoad

{

    [superviewDidLoad];

   NSDictionary *row1 = [[NSDictionaryalloc] initWithObjectsAndKeys:@"MacBook",@"Name",@"White",@"Color",nil];

   NSDictionary *row2 = [[NSDictionaryalloc] initWithObjectsAndKeys:@"MacBook Pro",@"Name",@"Silver",@"Color",nil];

   NSDictionary *row3 = [[NSDictionaryalloc] initWithObjectsAndKeys:@"iMac",@"Name",@"Silver",@"Color",nil];

   NSDictionary *row4 = [[NSDictionaryalloc] initWithObjectsAndKeys:@"Mac Mini",@"Name",@"Silver",@"Color",nil];

   NSDictionary *row5 = [[NSDictionaryalloc] initWithObjectsAndKeys:@"Mac Pro",@"Name",@"Silver",@"Color",nil];

    NSArray *array = [[NSArray alloc] initWithObjects:row1,row2,row3,row4,row5,nil];

    self.computers = array;

    

    [row1 release];

    [row2 release];

    [row3 release];

    [row4 release];

    [row5 release];

    [array release];   

    

}



- (void)viewDidUnload

{

   computers = nil;

    [superviewDidUnload];

   // Release any retained subviews of the main view.

   // e.g. self.myOutlet = nil;

}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

   // Return YES for supported orientations

    return (interfaceOrientation == UIInterfaceOrientationPortrait);

}


#pragma mark - 

#pragma mark Table Data Source Methods

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

    return [self.computerscount];

}


#pragma mark -

#pragma mark Table View Delegate Methods

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    static NSString *CellTableIdentifier = @"CellTableIdentifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellTableIdentifier];

    if(cell==nil){

        cell = [[[UITableViewCellalloc] initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:CellTableIdentifier] autorelease];

        CGRect nameLableRect = CGRectMake(0,5, 70, 15);

        UILabel *nameLable = [[UILabel alloc] initWithFrame:nameLableRect];

        nameLable.textAlignment =UITextAlignmentRight;

        nameLable.text=@"Name";

        nameLable.font= [UIFontboldSystemFontOfSize:12];

        [cell.contentViewaddSubview:nameLable];

        [nameLable release];

        

        CGRect colorLableRect = CGRectMake(0,26, 70, 15);

        UILabel *colorLable = [[UILabel alloc] initWithFrame:colorLableRect];

        colorLable.textAlignment =UITextAlignmentRight;

        colorLable.text =@"Color";

        colorLable.font = [UIFontboldSystemFontOfSize:12];

        [cell.contentViewaddSubview:colorLable];

        [colorLable release];

        

        CGRect nameValueRect = CGRectMake(80,5, 200, 15);

        UILabel *nameValue = [[UILabel alloc] initWithFrame:nameValueRect];

        nameValue.tag =kNameValueTag;

        [cell.contentViewaddSubview:nameValue];

        [nameValue release];

        

        CGRect colorValueRect = CGRectMake(80,25, 200, 15);

        UILabel *colorValue = [[UILabel alloc] initWithFrame:colorValueRect];

        colorValue.tag =KColorValueTag;

        [cell.contentViewaddSubview:colorValue];

        [colorValue release];         

    }

    

    NSUInteger row = [indexPath row];

    NSDictionary *rowData = [self.computersobjectAtIndex:row];

    UILabel *name = (UILabel *)[cell.contentViewviewWithTag:kNameValueTag];

    name.text = [rowDataobjectForKey:@"Name"];

    

    UILabel *color = (UILabel *)[cell.contentViewviewWithTag:KColorValueTag];

    color.text = [rowDataobjectForKey:@"Color"];

    return cell;

}


@end


//

//  test12ViewController.h

//  test12

//

//  Created by lily bear on 12-2-15.

//  Copyright 2012 lily. All rights reserved.

//


#import<UIKit/UIKit.h>


#define KNameValueTag1

#define KColorValueTag2


@interface test12ViewController :UIViewController <UITableViewDataSource,UITableViewDelegate>{

    NSArray *computers;

    UITableViewCell *tvCell;    

}


@property (nonatomic,retain) NSArray *computers;

@property (nonatomic,retain) IBOutletUITableViewCell *tvCell;


@end


//

//  test12ViewController.m

//  test12

//

//  Created by lily bear on 12-2-15.

//  Copyright 2012 lily. All rights reserved.

//


#import"test12ViewController.h"


@implementation test12ViewController


@synthesize computers;

@synthesize tvCell;


- (void)dealloc

{

    [computersrelease];

    [tvCellrelease];

    [superdealloc];

}


- (void)didReceiveMemoryWarning

{

   // Releases the view if it doesn't have a superview.

    [superdidReceiveMemoryWarning];

    

   // Release any cached data, images, etc that aren't in use.

}


#pragma mark - View lifecycle



// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.

- (void)viewDidLoad

{

    [superviewDidLoad];

   NSDictionary *row1 = [[NSDictionaryalloc] initWithObjectsAndKeys:@"MacBook",@"Name",@"White",@"Color",nil];

   NSDictionary *row2 = [[NSDictionaryalloc] initWithObjectsAndKeys:@"MacBook Pro",@"Name",@"Silver",@"Color",nil];

   NSDictionary *row3 = [[NSDictionaryalloc] initWithObjectsAndKeys:@"iMac",@"Name",@"Silver",@"Color",nil];

   NSDictionary *row4 = [[NSDictionaryalloc] initWithObjectsAndKeys:@"Mac Mini",@"Name",@"Silver",@"Color",nil];

   NSDictionary *row5 = [[NSDictionaryalloc] initWithObjectsAndKeys:@"Mac Pro",@"Name",@"Silver",@"Color",nil];

    NSArray *array = [[NSArray alloc] initWithObjects:row1,row2,row3,row4,row5,nil];

    self.computers = array;

    

    [row1 release];

    [row2 release];

    [row3 release];

    [row4 release];

    [row5 release];

    [array release]; 

}



- (void)viewDidUnload

{

    self.computers = nil;

    self.tvCell = nil;

    [superviewDidUnload];

   // Release any retained subviews of the main view.

   // e.g. self.myOutlet = nil;

}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

   // Return YES for supported orientations

    return (interfaceOrientation == UIInterfaceOrientationPortrait);

}


#pragma mark -

#pragma mark Table View Data Source Methods


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

    return [self.computerscount];

}


#pragma mark -

#pragma mark Table View Delegate Methods

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    static NSString *CustomCellIdentifier =@"CustomCellIdentifier";

    

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CustomCellIdentifier];

    if(cell == nil){

       NSArray *nib = [[NSBundlemainBundle] loadNibNamed:@"CustomCell"owner:selfoptions:nil];

        if([nib count] > 0){

            cell = self.tvCell;

        }

        else{

           NSLog(@"failed to load CustomCell nib file!");

        }

    }

    NSUInteger row = [indexPath row];

    NSDictionary *rowData = [self.computersobjectAtIndex:row];

    

    UILabel *colorLable = (UILabel *)[cell viewWithTag:KNameValueTag];

    colorLable.text = [rowDataobjectForKey:@"Color"];

    

    

    UILabel *nameLable = (UILabel *)[cell viewWithTag:KColorValueTag];

    nameLable.text = [rowDataobjectForKey:@"Name"];

    

    return cell;

    

}


@end


//

//  main.m

//  test13

//

//  Created by lily bear on 12-2-15.

//  Copyright 2012 lily. All rights reserved.

//


#import<UIKit/UIKit.h>


int main(int argc,char *argv[])

{

   NSAutoreleasePool *pool = [[NSAutoreleasePoolalloc] init];

    int retVal = UIApplicationMain(argc, argv,nil, nil);

    [pool release];

    return retVal;

}


//

//  test13ViewController.m

//  test13

//

//  Created by lily bear on 12-2-15.

//  Copyright 2012 lily. All rights reserved.

//


#import"test13ViewController.h"


@implementation test13ViewController


@synthesize names;

@synthesize keys;


- (void)dealloc

{

    [namesrelease];

    [keysrelease];

    [superdealloc];

}


- (void)didReceiveMemoryWarning

{

   // Releases the view if it doesn't have a superview.

    [superdidReceiveMemoryWarning];

    

   // Release any cached data, images, etc that aren't in use.

}


#pragma mark - View lifecycle



// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.

- (void)viewDidLoad

{

    [superviewDidLoad];

   NSString *path = [[NSBundlemainBundle] pathForResource:@"sortednames"ofType:@"plist"];

   NSDictionary *dict = [[NSDictionaryalloc] initWithContentsOfFile:path];

    self.names = dict;

    [dict release];

    

    NSArray *array = [[names allKeys] sortedArrayUsingSelector:@selector(compare:)];

    self.keys = array;

    

}



- (void)viewDidUnload

{

    names = nil;

    keys = nil;

    [superviewDidUnload];

   // Release any retained subviews of the main view.

   // e.g. self.myOutlet = nil;

}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

   // Return YES for supported orientations

    return (interfaceOrientation == UIInterfaceOrientationPortrait);

}


#pragma mark -

#pragma mark Table View Data Source Methods

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

    return [keys count];

}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

    NSString *key = [keys objectAtIndex:section];

    NSArray *nameSection = [names objectForKey:key];

    return [nameSection count];

}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    NSUInteger section = [indexPath section];

    NSUInteger row = [indexPath row];

    

    NSString *key = [keys objectAtIndex:section];

    NSArray *nameSection = [names objectForKey:key];

    

    static NSString *SectionTableIdentifier =@"SectionTableIdentifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SectionTableIdentifier];

    if(cell == nil){

        cell = [[UITableViewCellalloc] initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:SectionTableIdentifier];

    }

    cell.textLabel.text = [nameSectionobjectAtIndex:row];

    return cell;

}


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

    NSString *key = [keys objectAtIndex:section];

    return key;

}


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

    return keys;

}


@end


//

//  test14ViewController.h

//  test14

//

//  Created by lily bear on 12-2-15.

//  Copyright 2012 lily. All rights reserved.

//


#import<UIKit/UIKit.h>


@interface test14ViewController :UIViewController <UITableViewDataSource,UITableViewDelegate, UISearchBarDelegate>{

    UITableView *table;

    UISearchBar *search;

    NSDictionary *allName;

   NSMutableDictionary *names;

   NSMutableArray *keys;

    BOOL isSearching;

}


@property (nonatomic,retain) IBOutletUITableView *table;

@property (nonatomic,retain) IBOutletUISearchBar *search;

@property (nonatomic,retain) NSDictionary *allName;

@property (nonatomic,retain) NSMutableDictionary *names;

@property (nonatomic,retain) NSMutableArray *keys;


- (void)resetSearch;

- (void)handleSearchForTerm:(NSString *)searchTerm;


@end


//

//  test14ViewController.m

//  test14

//

//  Created by lily bear on 12-2-15.

//  Copyright 2012 lily. All rights reserved.

//


#import"test14ViewController.h"

#import"NSDictionary-MutableDeepCopy.h"


@implementation test14ViewController


@synthesize table;

@synthesize search;

@synthesize allName;

@synthesize names;

@synthesize keys;


- (void)resetSearch{

    NSMutableDictionary *allNamesCopy = [self.allNamemutableDeepCopy];

    self.names = allNamesCopy;

    [allNamesCopy release];

   NSMutableArray *keyArray = [[NSMutableArrayalloc] init];

    [keyArrayaddObject:UITableViewIndexSearch];

    [keyArrayaddObjectsFromArray:[[self.allNameallKeys] sortedArrayUsingSelector:@selector(compare:)]];

    self.keys = keyArray;

    [keyArray release];

}


- (void)handleSearchForTerm:(NSString *)searchTerm{

    NSMutableArray *sectionsToRemove = [[NSMutableArrayalloc] init];

    [selfresetSearch];

    

    for(NSString *key in self.keys){

        NSMutableArray *array = [names valueForKey:key];

        NSMutableArray *toRemove = [[NSMutableArrayalloc] init];

        for(NSString *name in array){

           if([name rangeOfString:searchTerm options:NSCaseInsensitiveSearch].location ==NSNotFound)

                [toRemoveaddObject:name];

        }

        if([array count] == [toRemove count])

            [sectionsToRemoveaddObject:key];

        [array removeObjectsInArray:toRemove];

        [toRemove release];

    }

    [self.keysremoveObjectsInArray:sectionsToRemove];

    [sectionsToRemoverelease];

    [tablereloadData];

}


- (void)dealloc

{

    [tablerelease];

    [searchrelease];

    [allNamerelease];

    [namesrelease];

    [keysrelease];

    [superdealloc];

}


- (void)didReceiveMemoryWarning

{

   // Releases the view if it doesn't have a superview.

    [superdidReceiveMemoryWarning];

    

   // Release any cached data, images, etc that aren't in use.

}


#pragma mark - View lifecycle



// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.

- (void)viewDidLoad

{

    [superviewDidLoad];

   NSString *path = [[NSBundlemainBundle] pathForResource:@"sortednames"ofType:@"plist"];

   NSDictionary *dict = [[NSDictionaryalloc] initWithContentsOfFile:path];

    self.allName = dict;

    [dict release];

    

    [selfresetSearch];

    [tablereloadData];

    [tablesetContentOffset:CGPointMake(0.0,44.0) animated:NO];

}



- (void)viewDidUnload

{

    self.table = nil;

    self.search = nil;

    self.allName = nil;

    self.names = nil;

    self.keys = nil;

    [superviewDidUnload];

   // Release any retained subviews of the main view.

   // e.g. self.myOutlet = nil;

}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

   // Return YES for supported orientations

    return (interfaceOrientation == UIInterfaceOrientationPortrait);

}


#pragma mark -

#pragma mark Table View Data Source Methods

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

    return ([keys count] > 0) ? [keyscount]: 1;

}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

    if([keys count] ==0){

        return 0;

    }

    NSString *key = [keys objectAtIndex:section];

    NSArray *nameSection = [names objectForKey:key];

    return [nameSection count];

}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    NSUInteger section = [indexPath section];

    NSUInteger row = [indexPath row];

    

    NSString *key = [keys objectAtIndex:section];

    NSArray *nameSection = [names objectForKey:key];

    

    static NSString *SectionTableIdentifier =@"SectionTableIdentifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SectionTableIdentifier];

    if(cell == nil){

        cell = [[UITableViewCellalloc] initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:SectionTableIdentifier];

    }

    cell.textLabel.text = [nameSectionobjectAtIndex:row];

    return cell;

}


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

    if([keys count] ==0)

        return nil;

    NSString *key = [keys objectAtIndex:section];

   if(key == UITableViewIndexSearch)

        return nil;

    return key;

}


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

   if(isSearching)

        return nil;

    return keys;

}


#pragma mark -

#pragma mart Table View Delegate Methods

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

    [searchresignFirstResponder];

   isSearching = NO;

    search.text = @"";

    [tableView reloadData];

    return indexPath;

}


#pragma mark -

#pragma mark Search Bar Delegate Methods

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{

    NSString *searchTerm = [searchBar text];

    [selfhandleSearchForTerm:searchTerm];

}


- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{

    if([searchText length] == 0){

        [selfresetSearch];

        [tablereloadData];

    }

    [selfhandleSearchForTerm:searchText];

}


- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar{

   isSearching = NO;

    search.text = @"";

    [selfresetSearch];

    [tablereloadData];

    [searchBarresignFirstResponder];

}


- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar{

   isSearching = YES;

    [tablereloadData];

}


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

    NSString *key = [keys objectAtIndex:index];

   if(key == UITableViewIndexSearch){

        [tableView setContentOffset:CGPointZero animated:NO];

        return NSNotFound;

    }

    else return index;

}


@end







[to be continued]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值