2 u014284625 u014284625 于 2014.03.22 14:35 提问

学生党求教啊 关于IOS TableViewCell

{
NSIndexPath *seletedRow;
NSIndexPath *currentRow;
NSIndexPath *pastRow;
UITableViewCell *pastCell;
NSMutableArray *_datalist;
}

@end

@implementation ViewController

  • (void)viewDidLoad
    {
    [super viewDidLoad];
    _datalist=[NSMutableArray arrayWithObjects:@"A",@"B",@"C",@"C",@"C",@"C",@"C", nil];
    }

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

    return _datalist.count;
    }

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//记录上一个Cell

static NSString *cellIdentifier = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

if (cell==nil) {
    cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
}


cell.textLabel.text = [_datalist objectAtIndex:[indexPath row]];


//调用点击cell这后进行的条件判断(抽取到一个方法中)
[self selectCondition:cell indexPath:indexPath];

return cell;

}

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

    currentRow = indexPath;
    NSArray *indexPathArray = [NSArray arrayWithObject:indexPath];
    [tableView reloadRowsAtIndexPaths:indexPathArray withRowAnimation:UITableViewRowAnimationMiddle];

}

-(void)selectCondition:(UITableViewCell *)cell indexPath:(NSIndexPath *)indexPath
{
//获取上一个cell,然后再将上一个cell隐藏的控件显示出来
if (pastRow != nil && ![pastRow isEqual:cell]) {

    pastRow = nil;
}

//再次选中该行隐藏这个view
if ([currentRow isEqual:seletedRow]) {
    NSLog(@"[currentRowAtIndexPath isEqual:seletedRowAtIndexPath]   条件成立     cellForRowAtIndexPath");
    //再次点击的时候,将所有的记录行号的信息全部消除
    seletedRow = nil;
    currentRow = nil;
    pastRow = nil;


}

//选中一行加载一个view
if (currentRow !=nil && [currentRow isEqual:indexPath]) {


    //点击了就记录当前的cell,用于下一次点击的时候调用
    pastCell = cell;
    NSLog(@"past的测试:%@",pastCell);
    seletedRow = currentRow;
    pastRow = indexPath;

    //调用子控件设置的方法
    [self setSubViewAndButton:cell];
}

}

  • (void)setSubViewAndButton:(UITableViewCell *)cell
    {

    //展开的时候创建uiview
    UIView *view = [[UIView alloc]init];
    view.frame = CGRectMake(0, 50, self.view.frame.size.width, 50);
    //view.backgroundColor=[UIColor grayColor];
    //view.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"back.jpg"]];
    view.backgroundColor = [UIColor yellowColor];
    [cell.contentView addSubview:view];

    NSLog(@"currentRowAtIndexPath !=nil && [currentRowAtIndexPath isEqual:indexPath] 条件成立 cellForRowAtIndexPath ");
    //在动态创建的view上面添加想要的子控件(uibutton,可以设置文字,可以设置背景图片)
    //呼叫按钮
    UIButton *btn = [[UIButton alloc] init];
    //[callOutButton setTitle:@"呼叫" forState:UIControlStateNormal];
    //[btn setBackgroundImage:[UIImage imageNamed:@"cat.png"] forState:UIControlStateNormal];
    btn.frame = CGRectMake(20, 5, 30, 30);
    //callOutButton.backgroundColor = [UIColor redColor];
    [view addSubview:btn];

    //给view内部的按钮设置外部的访问接口(看需不需要)
    //给按钮添加监听事件
    [btn addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside];
    }

  • (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    NSLog(@"heightForRowAtIndexPath");

    if (currentRow !=nil && [currentRow isEqual:indexPath]) {
    if ([currentRow isEqual:seletedRow]) {
    tableView.scrollEnabled = YES; //点击以后:合并起来tableview可以滚动
    return 50;
    }
    tableView.scrollEnabled = NO; //点击之后:展开后tableview不可以滚动
    return 100;
    }
    return 50;
    }

  • (void)btnAction:(UIButton *)button
    {
    NSLog(@"////");

    [_datalist removeObjectAtIndex:currentRow.row];
    [self.MyTable deleteRowsAtIndexPaths:[NSArray arrayWithObject:currentRow] withRowAnimation:UITableViewRowAnimationLeft];
    }

各位大大,这是我自己做的一个可以点击Cell 改变宽度的DEMO 。 点击了可以实现下拉出一个View 再点击能收起来。点击另外一个Cell自动把上一个Cell收起隐藏,Xcode5.0的时候还好好的 ,升级5.1 点击Cell 不能实现Cell 的收起隐藏了,小弟这两天弄这个急死了,有大神能帮我看看是不是代码有问题,还是升级了Xcode 5.1 的问题啊? 在线等啊,急死了

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
iOS关于tableViewCell的视图层次
没亲自试过,听别人说的cell的层次结构,故是别人的原创,在此只是做一下备忘。iOS7中加在cell的contentView上的视图subView的层次结构为cell->scrollView->contentView->subView,有四层视图,要由subView找到其cell需向上找三层父视图(subVIew.superVIew.superVIew.superVIew)。 iOS7以下与iO
iOS TableView和TableViewCell的风格
TableView的风格1.UITableViewStylePlain 普通风格UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.height-20) style:UITableViewStyleP
ios TableViewCell收缩demo
ios TableViewCell收缩、伸缩、缩放功能
iOS之如何自适应TableViewCell的高度
1. 问题描述:     在项目中会遇到由于每个cell的图片和文本大小不一致,如果cell的height高度设置不合理的话,对用户体验不是很好。但是如果对cell的height高度设定死之后,当遇到大量文本的话也会出现问题。所以这就需要在每次对cell进行绘制的时候对cell的height进行计算,然后再绘制cell。但是一般情况下,这种对cell的height计算会比较负责。但是App
关于tableViewCell 中大量圆形头像 优化性能的笔记
由于tableView 中引用了大量的圆形头像设计,导致性能问题,最后找到一种最好的方案,做下笔记,仅供自己参考,如有错误,请指正。最好的方案:=====》一层imageView显示正常图片,上边覆盖一层imageView 显示中间位透明圆形的图片。其他设置圆角的方案:方案一;贝塞尔曲线 uiview+addition;- (void)setAllCornerWithRoundedCornersS
学linux最大的好处
http://www.linuxdiyf.com/viewarticle.php?id=196009作者: pallana 发布日期: 2011-4-03 [i=s] 本帖最后由 pallana 于 2011-4-3 10:22 编辑 我认为,不是Linux难,而是操作系统难,不是操作系统难,而是我们的社会比较难理解。我们学习的Linux系统是对社会的一个总结,而这些总结是以
使用storyboard tableView的cell自适应高度
效果图 先约束好图片的大小(防止被拉伸)、上左的距离(固定位置)、下边的距离(当label的字数很少时,cell的高度以图片的高度加上边的距离加上下边的最小距离)label(上面) 约束好上下左右(vertical改为250) label(下面) 同样约束好上下左右(vertical同样改为250) 最后在tableView的代理方法中实现下面两条方法,就可以cell自适应高度了- (
IOS开发 自定义TableViewCell(registerNib:与registerClass:的差异)
IOS开发 自定义TableViewCell(registerNib:与registerClass:的差异)
iOS隐藏tableview多余的分割线以及解决cell左边短20px
解决cell分割线左边短20px: /** * 解决cell分割线左边短20px的问题 */ - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { if ([cell respon
iOS开发 ----- 学生管理系统改进版
之前的那个demo没有添加本地文件读写功能,所以每次都比较麻烦,要输入很多东西,才能看到系统的真面目,所以,今天改进了一下,可以读取本地文件,每次操作后都会保存到文件中,以免发生bug导致数据丢失,没有文件的话,会自动新建,然后会提示添加相关数据,然后会自动保存到文件这个完全是用字符串存储的,而年龄的话是int,所以中间会由字符串转int,int转字符串的情况 还有就是分割和组合字符串,写到文件中以