自定义UITableView折叠效果

来源:互联网 发布:淘宝开店注册在哪里 编辑:程序博客网 时间:2024/05/16 04:46
类似于QQ的那种折叠效果。只刷新点击的折叠行。不加载所有数据源。  测试环境Xcode4.3.3+SDK5.1兼容ios6  目测管用////  MyTableViewController.m//  TableSectionStatistics////  Created by rlf on 12-11-23.//  Copyright (c) 2012年 __rlf__. All rights reserved.// #import "MyTableViewController.h"#define originalHeight 25.0f#define newHeight 85.0f#define isOpen @"85.0f" @interface MyTableViewController () @end @implementation MyTableViewController{    NSMutableDictionary *dicClicked;    NSInteger count;    CGFloat mHeight;    NSInteger sectionIndex;} - (id)initWithStyle:(UITableViewStyle)style{    self = [super initWithStyle:style];    if (self) {        // Custom initialization    }    return self;} - (void)viewDidLoad{    [super viewDidLoad];    count = 0;    mHeight = originalHeight;    sectionIndex = 0;    dicClicked = [NSMutableDictionary dictionaryWithCapacity:3];} - (void)viewDidUnload{    [super viewDidUnload];    // Release any retained subviews of the main view.    // e.g. self.myOutlet = nil;} #pragma mark - Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{    // Return the number of sections.    return 50;} - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{    return 2;} - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{       static NSString *contentIndentifer = @"Container";    if (indexPath.row == 0) {        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:contentIndentifer];        if (cell == nil) {            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:contentIndentifer];        }        NSString *statisticsContent = [[NSString alloc] initWithString:@"rlf:岁月流芳,花开几度,走在岁月里,醉在流香里,总在时光里辗转徘徊。花开几许,落花几度,岁月寒香,飘进谁的诗行,一抹幽香,掺入几许愁伤,流年似花,春来秋往,睁开迷离的双眼,回首张望,随风的尘烟荡漾着迷忙,昨日的光阴已逝去,留下无尽的回忆让人留恋与追忆"];        cell.textLabel.font = [UIFont systemFontOfSize:12.0f];        cell.textLabel.text = statisticsContent;        cell.textLabel.textColor = [UIColor brownColor]        ;        cell.textLabel.opaque = NO; // 选中Opaque表示视图后面的任何内容都不应该绘制               cell.textLabel.numberOfLines = 8;               cell.selectionStyle = UITableViewCellSelectionStyleNone;        return cell;    }    static NSString *CellIdentifier = @"Cell";    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];    if (cell == nil) {        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];    }    cell.imageView.image = [UIImage imageNamed:@"ic_milestone_heart.png"];    cell.textLabel.text = [NSString stringWithFormat:@"%d",count];    count++;    return cell;} //Section的标题栏高度-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{    if (section == 0)        return 46;    else        return 30.0f;}  -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{    CGRect headerFrame = CGRectMake(0, 0, 300, 30);    CGFloat y = 2;    if (section == 0) {        headerFrame = CGRectMake(0, 0, 300, 100);        y = 18;    }    UIView *headerView = [[UIView alloc] initWithFrame:headerFrame];    UILabel *dateLabel=[[UILabel alloc] initWithFrame:CGRectMake(20, y, 240, 24)];//日期标签    dateLabel.font=[UIFont boldSystemFontOfSize:16.0f];    dateLabel.textColor = [UIColor darkGrayColor];    dateLabel.backgroundColor=[UIColor clearColor];    UILabel *ageLabel=[[UILabel alloc] initWithFrame:CGRectMake(216, y, 88, 24)];//年龄标签    ageLabel.font=[UIFont systemFontOfSize:14.0];    ageLabel.textAlignment=UITextAlignmentRight;    ageLabel.textColor = [UIColor darkGrayColor];    ageLabel.backgroundColor=[UIColor clearColor];         NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];    dateFormatter.dateFormat = @"MM dd,yyyy";    dateLabel.text = [NSString stringWithFormat:@"%@",[dateFormatter stringFromDate:[NSDate date]]];    ageLabel.text = @"1岁 2天";         [headerView addSubview:dateLabel];    [headerView addSubview:ageLabel];    return headerView;} #pragma mark - Table view delegate - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{    if (indexPath.row == 0) {          UITableViewCell *targetCell = [tableView cellForRowAtIndexPath:indexPath];        if (targetCell.frame.size.height == originalHeight+1){                     [dicClicked setObject:isOpen forKey:indexPath];        }        else{                [dicClicked removeObjectForKey:indexPath];        }            [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];    }    NSLog(@"indexPath=%@",indexPath);    NSLog(@"dicClicked=%@",dicClicked);} -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{    if (indexPath.row == 0) {        if ([[dicClicked objectForKey:indexPath] isEqualToString: isOpen])            return [[dicClicked objectForKey:indexPath] floatValue];        else            return originalHeight;        }    else {        return 45.0f;    }} @end

0 0
原创粉丝点击