首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >来自cellForRowAtIndexPath的UITableViewCell具有未更新的子视图

来自cellForRowAtIndexPath的UITableViewCell具有未更新的子视图
EN

Stack Overflow用户
提问于 2011-10-17 02:49:30
回答 3查看 1.2K关注 0票数 0

在我的cellForRowAtIndexPath中,我在一个子视图上进行了一些自定义格式设置,以确定该单元格何时被选中。完整的函数是:

代码语言:javascript
运行
复制
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIView *left;
    UIImageView *leftImage;
    UILabel *label;
    ArticleButton *btn;

    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"];
    if (!cell)
    {
        cell = [[[UITableViewCell alloc]
                 initWithStyle:UITableViewCellStyleSubtitle 
                 reuseIdentifier:@"UITableViewCell"] autorelease];

        left = [[[UIView alloc] initWithFrame:CGRectMake(0, 2, 155, 139)] autorelease];
        leftImage = [[[UIImageView alloc] initWithFrame:CGRectMake(7,9,141,77)] autorelease];
        label = [[[UILabel alloc] initWithFrame:CGRectMake(6,87,141,48)] autorelease];
        btn = [[[ArticleButton alloc] initWithFrame:CGRectMake(0,2,155,139)] autorelease];

        left.tag = 0;
        leftImage.tag = 1;
        label.tag = 2;
        btn.tag = 3;

        [btn addTarget:self action:@selector(selectArticle:) forControlEvents:UIControlEventTouchUpInside];

        [cell.contentView addSubview:left];
        [cell.contentView addSubview:leftImage];    
        [cell.contentView addSubview:label];
        [cell.contentView addSubview:btn];
    }
    else
    {
        left = (UIView*)[cell viewWithTag:0];
        leftImage = (UIImageView*)[cell viewWithTag:1];
        label = (UILabel*)[cell viewWithTag:2];
        btn = (ArticleButton*)[cell viewWithTag:3];
    }

...load *entry


    NSURL *url = [NSURL URLWithString:[entry imageUrl]];

    FeedEntry* selectedEntry = [detailViewController detailItem];
    NSString* selectedTitle = selectedEntry.title;



    if ([selectedTitle isEqualToString:entry.title])
    {       
        [left setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"cellbackground_sel.png"]]];  <-- PROBLEM IS THIS IMAGE NEVER CHANGES
        NSLog(@"selected row %@", selectedTitle);
    }
    else{
        [left setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"cellbackground2.png"]]];
    }           

    [left setNeedsDisplay];

    [leftImage setImageWithURL:url placeholderImage:[UIImage imageNamed:@"placeholder.gif"]];
    [leftImage setContentMode:UIViewContentModeScaleAspectFill];
    leftImage.clipsToBounds = YES;

       [label setBackgroundColor:[UIColor clearColor]];
    label.textColor = [UIColor whiteColor];
    label.text  = [entry.title stringByAppendingString:@"\n\n"];
    label.numberOfLines  = 3;
    label.lineBreakMode = UILineBreakModeClip;
    label.font = [UIFont fontWithName:@"Arial-BoldMT" size:12];

    cell.selectionStyle = UITableViewCellSelectionStyleNone;


    return cell;
}

我遇到的问题是这个部分:

代码语言:javascript
运行
复制
if ([selectedTitle isEqualToString:entry.title])
    {       
        [left setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"cellbackground_sel.png"]]];
        NSLog(@"selected row %@", selectedTitle);
    }
    else{
        [left setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"cellbackground2.png"]]];
    }           

其他一切都正常,但是尽管我记录了它被调用,但是我的子视图的背景永远不会改变,以指示问题行是选定的行。我试着调用setNeedsDisplay,我试着上下滚动,试图让单元格出列并重新创建,它从来不使用另一个图像,即使它记录正在绘制的行是选定的行。

(一旦我开始工作,我需要实现“正确”部分,在一行中有两个“单元格”,并且只有一个将被选中。这就是为什么我在单元格子视图中这样做的原因)。

我做错了什么?

EN

Stack Overflow用户

发布于 2011-10-17 03:06:31

只要选择了特定的UITableViewCell,这个特定的委托就会被调用-

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

尝试查看您的按钮点击是否首先由此代表响应,而不是转到您定义的selectArticle:选择器...

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7786503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档