zoukankan      html  css  js  c++  java
  • UITableView自定义单元格

    随手笔记:

    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:@" %@",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

  • 相关阅读:
    docker删除常见命令
    测试网中用户添加docker yum源
    kafka 重新分配partition
    docker-compose常用命令
    docker 常用命令
    docker-compose部署ELK
    ELK全Dokcer 部署
    Harbor修改/data目录位置
    单机多es容器服务部署的网络模式
    C++使用模板类时出现LNK2019 unresolved external symbol错误.
  • 原文地址:https://www.cnblogs.com/lingzeng/p/3864986.html
Copyright © 2011-2022 走看看