0

我有一个UITableView20 行。在每一行UIButton中,添加了两个 s,所以我总共有 40 个按钮。如何访问每个单元格中的每个按钮?所有这些UIButton都有两个tags 1 和 2。

例如:我想编写一个方法来更改特定行中 2 个按钮的背景颜色:

-(void)changeColor:(int)row{
     //code here
}

你有什么建议吗?

-(UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *cell = [tv dequeueReusableCellWithIdentifier:@"Cell"];
    if (cell == nil){
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                       reuseIdentifier:@"Cell"] autorelease];
        UIButton *button1=[[UIButton alloc] initWithFrame:CGRectMake(x1,y1,w1,h1)];
        UIButton *button2=[[UIButton alloc] initWithFrame:CGRectMake(x2,y2,w2,h2)];       
        [button1 setTag:1];
        [button2 setTag:2];
        [[cell contentView] addSubview:button0 ];
        [[cell contentView] addSubview:button1 ];
        [button0  release];
        [button1  release];        
    }
    UIButton *button1  = (UIButton *)[cell viewWithTag:1];
    UIButton *button2  = (UIButton *)[cell viewWithTag:2];
    return cell;
}
4

2 回答 2

1

你应该能够做到这一点:

-changeColor:(int)row
{
    NSIndexPath indexPath = [NSIndexPath indexPathForRow:row inSection:0]; // Assuming one section
    UITableViewCell *cell = [myTableView cellForRowAtIndexPath:indexPath];

    UIButton *button1 = (UIButton *)[[cell contentView] viewWithTag:1];
    UIButton *button2 = (UIButton *)[[cell contentView] viewWithTag:2];
}

*某些语法可能是错误的。我手边没有 Xcode

于 2012-12-04T21:18:26.683 回答
0

如果您想更改按钮颜色以突出显示/关闭状态,我建议使用以下内容:

[yourButton addTarget:self action:@selector(goToView:) forControlEvents:UIControlEventTouchUpInside];
[yourButton addTarget:self action:@selector(changeColor:) forControlEvents:UIControlEventTouchDown];
[yourButton addTarget:self action:@selector(touchCancel:) forControlEvents:UIControlEventTouchDragExit];

-(void)buttonAction:(UIButton*)sender
{
    [self touchCancel:sender];
    /* DO SOME MORE ACTIONS */
}

-(void)changeColor:(UIButton*)sender
{
    sender.backgroundColor = [UIColor redColor];
}

-(void)touchCancel:(UIButton*)sender
{
    sender.backgroundColor = [UIColor clearColor];
}

如果要使按钮具有不同的选定颜色,请创建一个包含所有选定状态的数组。然后在 cellForRowAtIndexPath 中使用数组检查按钮颜色是否需要不同的颜色。

当您想更改按钮颜色时,只需更改数组中的值并调用

[self.tableView reloadData];

确保在 if (cell == nil) 方法之外执行此操作,以便在重用单元格时也会调用它。

于 2012-12-05T12:22:44.170 回答