UITableView自定义单元格

时间:2024-12-17 16:05:32

随手笔记:

RootViewController代码

#import "RootViewController.h"

#import "AddressContact.h"

#import "Student.h"

#import "StuInfoViewController.h"

#import "NewViewController.h"

#import "POAPinyin.h"

#import "TableViewCellLeft.h"

#import "TableViewCellRight.h"

@interface RootViewController ()

{

AddressContact * addresscontact;

NSMutableArray * totaldata;

NSMutableArray * keys;

}

@end

@implementation RootViewController

-(void)dealloc

{

// [addresscontact.dictionary release];

[keys release];

[totaldata release];

[super dealloc];

}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

{

self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

if (self) {

// Custom initialization

}

return self;

}

-(void)add:(UIBarButtonItem *)barbtn

{

NewViewController * newvc=[[NewViewController alloc]init];

newvc.newdelegate=self;

CATransition *animation = [CATransition animation];

[animation setDuration:3];

// [animation setType: kCATransitionMoveIn];

[animation setType:@"rippleEffect"];

//[animation setSubtype: kCATransitionFromTop];

[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault]];

[self.navigationController.view.layer addAnimation:animation forKey:nil];

[self.navigationController pushViewController:newvc animated:YES];

[newvc release];

}

-(void)method:(NSString *)name sex:(NSString *)sex phone:(NSString *)phone hobby:(NSString *)hobby photo:(NSString *)photo

{

BOOL b=[name isEqualToString:@""];

BOOL c=name==nil;

if (!c&&!b) {

NSString * yingwenname=[POAPinyin convert:name];

char c=[yingwenname characterAtIndex:0];

NSString * firstchar=[NSString stringWithFormat:@"%c",c];

if (![keys containsObject:firstchar]) {

[keys addObject:firstchar];

keys=[[NSMutableArray alloc]initWithArray:[keys sortedArrayUsingSelector:@selector(compare:)]];

NSMutableArray * muary=[[NSMutableArray alloc]initWithCapacity:10];

[addresscontact.dictionary setObject:muary forKey:firstchar];

}

NSMutableArray * array=[addresscontact.dictionary objectForKey:firstchar];

//        for (int i=0; i<[totaldata count]; i++) {

//             NSMutableArray *array1= [totaldata objectAtIndex:i];

//            Student * stu=[array1 objectAtIndex:0];

//            if ([[POAPinyin convert:stu.name] isEqualToString:firstchar]) {

//                array=array1;

//                break;

//            }

//        }

[array retain];

Student * stu=[[Student alloc]init];

[stu setValue:name forKey:@"name"];

[stu setValue:sex forKey:@"sex"];

[stu setValue:phone forKey:@"phone"];

[stu setValue:hobby forKey:@"hobby"];

[stu setValue:photo forKey:@"photo"];

[array addObject:stu];

[stu release];

}

}

- (void)viewDidLoad

{

[super viewDidLoad];

//self.navigationItem.rightBarButtonItem=self.editButtonItem;

UIBarButtonItem * barbutton=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(add:)];

NSArray * ary=[[NSArray alloc]initWithObjects:self.editButtonItem,barbutton, nil];

self.navigationItem.rightBarButtonItems=ary;

self.navigationItem.title=@"23班通讯录";

UITableView * tableview=[[UITableView alloc]initWithFrame:CGRectMake(0, 0, 320, 480) style:UITableViewStyleGrouped];

//tableview.backgroundColor=[UIColor blueColor];

tableview.separatorColor=[UIColor redColor];

tableview.dataSource=self;

tableview.delegate=self;

[self.view addSubview:tableview];

[tableview release];

addresscontact=[AddressContact SharedAddressContact];

//[addresscontact retain];

[addresscontact.dictionary retain];

// keys=[[NSMutableArray alloc]initWithArray:[addresscontact.dictionary allKeys]];

NSString * path=[[NSBundle mainBundle]pathForResource:@"students" ofType:@"plist"];

NSMutableArray * array=[[NSMutableArray alloc]initWithContentsOfFile:path];

for (int i=0; i<[array count]; i++) {

NSDictionary *dictionary=array[i];

Student * stu= [[Student alloc]init];

[stu setValuesForKeysWithDictionary:dictionary];

NSString * firstchar=[NSString stringWithFormat:@"%c",[[POAPinyin convert:stu.name] characterAtIndex:0]];

NSMutableArray * grouparray=[addresscontact.dictionary objectForKey:firstchar];

if (grouparray==nil) {

grouparray=[[NSMutableArray alloc]initWithCapacity:10];

[addresscontact.dictionary setObject:grouparray forKey:firstchar];

}

[grouparray addObject:stu];

}

NSMutableArray * arry=[[NSMutableArray alloc]initWithArray:[addresscontact.dictionary allKeys]];

keys= [[NSMutableArray alloc] initWithArray:[arry sortedArrayUsingSelector:@selector(compare:)]];

//    totaldata=[[NSMutableArray alloc]initWithCapacity:26];

//    for (int i=0; i<26; i++) {

//        char key=(char)(i +65);

//        NSString * k=[NSString stringWithFormat:@"%c",key];

//        NSMutableArray * mary=[addresscontact.dictionary objectForKey:k];

//        [totaldata addObject:mary];

//    }

//keys=[[NSMutableArray alloc]initWithCapacity:26];

//   NSMutableArray * arry=[NSMutableArray arrayWithArray:[addresscontact.dictionary allKeys]];

//    keys= [NSMutableArray arrayWithArray:[arry sortedArrayUsingSelector:@selector(compare:)]];

//[addresscontact retain];

// Do any additional setup after loading the view.

}

-(void)viewWillAppear:(BOOL)animated

{

[super viewWillAppear:animated];

[[[self.view subviews]objectAtIndex:0] reloadData];

// targetIndexPathForMoveFromRowAtIndexPath: toProposedIndexPath:<#(NSIndexPath *)#>

}

#pragma mark - 添加或修改

-(void)setEditing:(BOOL)editing animated:(BOOL)animated

{

[super setEditing:editing animated:animated];

UITableView *tableview=[[(UITableView *)self.view subviews]objectAtIndex:0];

[tableview setEditing:!tableview.editing animated:animated];

}

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

{

//UITableViewCell * cell= [tableView cellForRowAtIndexPath:indexPath];

//    if ([cell.textLabel.text isEqualToString:@"(空)"]) {

//        return NO;

//    }

return YES;

}

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

{

return UITableViewCellEditingStyleDelete;

}

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

{

[tableView beginUpdates];

NSString * s= keys[indexPath.section];

if (editingStyle==UITableViewCellEditingStyleDelete) {

NSMutableArray * array=[addresscontact.dictionary objectForKey:s];

if ([array count]>1) {

[array removeObjectAtIndex:indexPath.row];

[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];

}

else

{

//[array removeObjectAtIndex:indexPath.row];

[keys removeObjectAtIndex:indexPath.section];

[addresscontact.dictionary removeObjectForKey:s];

//[totaldata removeObjectAtIndex:indexPath.section];

//NSLog(@"%d",indexPath.section);

[tableView deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationRight];

//[tableView reloadData];

}

}

[tableView endUpdates];

}

#pragma mark - 移动

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

{

return YES;

}

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

{

//[tableView beginUpdates];

// char c=(char)(sourceIndexPath.section+65);

NSString * s=[keys objectAtIndex:sourceIndexPath.section];

NSMutableArray *array=[addresscontact.dictionary objectForKey:s];

Student * stu=[array objectAtIndex:sourceIndexPath.row];

[stu retain];

[array removeObjectAtIndex:sourceIndexPath.row];

[array insertObject:stu atIndex:destinationIndexPath.row];

[stu release];

//[tableView endUpdates];

}

-(NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath

{

if (sourceIndexPath.section!=proposedDestinationIndexPath.section) {

return sourceIndexPath;

}

return proposedDestinationIndexPath;

}

#pragma mark - 选中cell

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

{//标记

StuInfoViewController * info = [[StuInfoViewController alloc]init];

int selection = indexPath.section;//cell.tag/1000;

int row = indexPath.row;//cell.tag%1000;

NSString *sec = keys[selection];

NSMutableArray * ary = [addresscontact.dictionary objectForKey:sec];

info.student = ary[row];

[self.navigationController pushViewController:info animated:NO];

// UITableViewCell *cell=(UITableViewCell *)tap.view;

CATransition *animation = [CATransition animation];

[animation setDuration:3];

// [animation setType: kCATransitionMoveIn];

[animation setType: @"pageCurl"];

//[animation setSubtype: kCATransitionFromTop];

[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault]];

[self.navigationController.view.layer addAnimation:animation forKey:nil];

[info release];

}

#pragma mark - 行数

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

{

//A  65

//    char key=(char)(section +65);

//    NSString * k=[NSString stringWithFormat:@"%c",key];

//    NSMutableArray *array= [addresscontact.dictionary objectForKey:k];

//    while (array==nil) {

//        key=key+1;

//          k=[NSString stringWithFormat:@"%c",key];

//        array= [addresscontact.dictionary objectForKey:k];

//    }

//

//    if ([array count]==0) {

//        return 1;

//    }

NSString * s=keys[section];

NSMutableArray * array=[addresscontact.dictionary objectForKey:s];

return [array count];

}

#pragma mark - 返回单元格

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

{

// NSLog(@"%d",indexPath.section);

//    char key=(char)(indexPath.section +65);

//    NSString * k=keys[indexPath.section];

//    NSMutableArray *array=[addresscontact.dictionary objectForKey:k];

//    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"aaa"];

//    if (cell==nil) {

//        cell=[[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"aaa"]autorelease];

//        UITapGestureRecognizer * tap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapclick:)];

//        //[cell addGestureRecognizer:tap];

//        [tap release];

//    }

//    if ([array count]>0) {//[array objectAtIndex:0]!=nil

//        cell.userInteractionEnabled=YES;

//        Student * stu= array[indexPath.row];

//       // cell.textLabel.multipleTouchEnabled=YES;

//        cell.textLabel.text=stu.name; //[stu.name stringByAppendingString:[NSString stringWithFormat:@"\n%@",stu.sex ]];

//        cell.detailTextLabel.text=stu.sex;

//        //cell.tag=indexPath.section*1000+indexPath.row;

//

//        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

//

//        return cell ;

//    }

//    else

//    {

//        cell.userInteractionEnabled=NO;

//        cell.textLabel.text=@"(空)";

//        cell.detailTextLabel.text=@"";

//        //cell.frame=CGRectMake(cell.frame.origin.x, cell.frame.origin.y, 0, 0);

//        //UITableViewCell *cell1=[[UITableViewCell alloc]init];

//         return cell;

//

//    }

//    UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];

//    button.backgroundColor= [UIColor redColor];

//    cell.accessoryView= button;

NSString * key=keys[indexPath.section];

NSMutableArray *array=[addresscontact.dictionary objectForKey:key];

Student *stu=array[indexPath.row];

if ([stu.sex isEqualToString:@"男"])

{

static NSString *identifier=@"cell1";

TableViewCellLeft *cell = [tableView dequeueReusableCellWithIdentifier:identifier];

if (cell==nil) {

cell=[[[TableViewCellLeft alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:identifier]autorelease];

}

cell.stu=array[indexPath.row];

return cell;

}

else

{

static NSString * identifier=@"cell2";

TableViewCellRight * cell=[tableView dequeueReusableCellWithIdentifier:identifier];

if (cell==nil) {

cell=[[[TableViewCellRight alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:identifier]autorelease];

}

cell.stu=array[indexPath.row];

return cell;

}

}

#pragma mark - 块标题

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

{

return keys[section];

}

//#pragma mark - 块foot

//- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section

//{

//    return keys[section];

//}

-(void)tapclick:(UITapGestureRecognizer*)tap

{

//标记

StuInfoViewController * info=[[StuInfoViewController alloc]init];

[self.navigationController pushViewController:info animated:NO];

UITableViewCell *cell=(UITableViewCell *)tap.view;

int selection=cell.tag/1000;

int row=cell.tag%1000;

char c=selection+65;

NSString *sec=[NSString stringWithFormat:@"%c",c];

NSMutableArray * ary= [addresscontact.dictionary objectForKey:sec];

info.student=ary[row];

CATransition *animation = [CATransition animation];

[animation setDuration:1];

// [animation setType: kCATransitionMoveIn];

[animation setType:@"pageCurl"];

//[animation setSubtype: kCATransitionFromTop];

[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault]];

[self.navigationController.view.layer addAnimation:animation forKey:nil];

[info release];

}

//右边的key

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

{

//    NSArray * ary=[addresscontact.dictionary allKeys];

//    NSArray * ay= [ary sortedArrayUsingSelector:@selector(compare:)];

return keys;

}

#pragma mark - 块数量

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{

return [addresscontact.dictionary count];

}

- (void)didReceiveMemoryWarning

{

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

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

{

NSString * key=keys[indexPath.section];

NSMutableArray *array=[addresscontact.dictionary objectForKey:key];

Student * stu=array[indexPath.row];

CGRect r= [stu.hobby boundingRectWithSize:CGSizeMake(220, 1000) options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont systemFontOfSize:15],NSFontAttributeName, nil]context:nil];

return 90+CGRectGetHeight(r);

}

/*

#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

{

// Get the new view controller using [segue destinationViewController].

// Pass the selected object to the new view controller.

}

*/

@end

自定义cell:

@implementation TableViewCellLeft

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

{

self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];

if (self) {

// Initialization code

self.backgroundColor=[UIColor yellowColor];

self.imageview=[[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 60, 60)]autorelease];

self.namelabel=[[[UILabel alloc]initWithFrame:CGRectMake(60, 0, 100, 30)]autorelease];

// self.namelabel.backgroundColor=[UIColor redColor];

self.sexlabel=[[[UILabel alloc]initWithFrame:CGRectMake(60, 30, 100, 30)]autorelease];

// self.sexlabel.backgroundColor=[UIColor orangeColor];

self.phonelabel=[[[UILabel alloc]initWithFrame:CGRectMake(60, 60, 130, 30)]autorelease];

self.hobbylabel=[[[UILabel alloc]initWithFrame:CGRectMake(60, 90, 100, 30)]autorelease];

//self.hobbylabel.backgroundColor=[UIColor purpleColor];

self.hobbylabel.font=[UIFont systemFontOfSize:15];

self.hobbylabel.numberOfLines=0;

[self.contentView addSubview: self.imageview];

[self.contentView addSubview: self.namelabel];

[self.contentView addSubview: self.sexlabel];

[self.contentView addSubview: self.phonelabel];

[self.contentView addSubview: self.hobbylabel];

}

return self;

}

-(void)setStu:(Student *)stu

{

self.namelabel.text=stu.name;

self.sexlabel.text=stu.sex;

self.phonelabel.text=stu.phone;

self.imageview.image=[UIImage imageNamed:stu.photo];

CGRect r= [stu.hobby boundingRectWithSize:CGSizeMake(220, 1000) options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObjectsAndKeys:self.hobbylabel.font,NSFontAttributeName, nil]context:nil];

self.hobbylabel.frame=CGRectMake(60, 90,220, CGRectGetHeight(r));

self.hobbylabel.text=stu.hobby;

}

- (void)awakeFromNib

{

// Initialization code

}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated

{

[super setSelected:selected animated:animated];

// Configure the view for the selected state

}

@end