繁体   English   中英

如何在UITableviewCell中点击更改UIButton的背景颜色?

[英]How can i change background color of UIButton on click in UITableviewCell?

我有UITableviewCell,我在单元格中放置了4个按钮。 当我点击一个按钮时,我需要将其背景颜色更改为红色。

所以现在我已经为此编写了代码,当我点击一个按钮时,那个按钮的背景颜色没有改变,而是在其他一些行改变背景颜色的同一个按钮。

使用案例:1。我在UITableView中有10行,每个单元格包含4个按钮,分别命名为“Good”,“Better”,“Best”,“Worst”。

  1. 当我点击第一行中的“好”按钮时,我希望它应该将颜色更改为红色。

3.现在如果我点击第一行中的“好”按钮然后在向下滚动时不改变颜色,但我可以看到第4和第8中的“好”按钮变为红色。
所以我的代码中有些错误会改变颜色。

请检查我的tableview代码和按钮单击代码

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 4;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    int sectionCount;
    if(section==0)
    {
        sectionCount=4;
    }else if(section==1){
        sectionCount=4;

    }else if (section==2){
        sectionCount=3;

    }else if(section==3){
        sectionCount=1;

    }
    return sectionCount;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    sharedManager=[Mymanager sharedManager];
        static NSString *CellIdentifier = @"cell";

        cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[questioncell alloc] initWithStyle:UITableViewCellStyleValue1
                                       reuseIdentifier:CellIdentifier];
        }

        cell.excellentButton.tag=indexPath.row;
        cell.goodButotn.tag=indexPath.row;
        cell.fineButton.tag=indexPath.row;
        cell.dorrButton.tag=indexPath.row;
    if(indexPath.section==0){
        cell.question.text=[questions objectAtIndex:indexPath.row];
    } else if(indexPath.section==1){
        cell.question.text=[section1 objectAtIndex:indexPath.row];

    }else if(indexPath.section==2){
        cell.question.text=[section2 objectAtIndex:indexPath.row];

    }else if(indexPath.section==3){
        cell.question.text=[section3 objectAtIndex:indexPath.row];

    }
 return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 200;
}

按钮单击代码

- (IBAction)goodButton:(id)sender {

    UIButton *button = (UIButton *)sender; // first, cast the sender to UIButton
    NSInteger row = button.tag; // recover the row
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:0];
    NSString *key=[NSString stringWithFormat:@"%ld",(long)indexPath.row];
    [sharedManager.ratingDic setValue:@"Good" forKey:key];
    cell.goodButotn.layer.backgroundColor=[[UIColor colorWithRed:39/255.0 green:174/255.0 blue:96/255.0 alpha:100] CGColor ];

    cell.betterButton.layer.backgroundColor=[[UIColor clearColor] CGColor ];
    cell.bestButton.layer.backgroundColor=[[UIColor clearColor] CGColor ];
    cell.worstButton.layer.backgroundColor=[[UIColor clearColor] CGColor ];



}

请帮我解决这个问题

UIButton *button = (UIButton *)sender; < - 这已经是你对按钮的引用了。 我看到有两种方法可以做到这一点

创建自定义UITableViewCell并实现重置所有颜色和设置正确颜色的方法。 这是干净的方式。 在这里,您可以实现更多逻辑并始终具有正确的相应数据。 这里每个按钮都调用一个自己的方法,你也有一个明确的方法。

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    if( self = [super initWithStyle:style reuseIdentifier:reuseIdentifier] )
    {
        [excellentButton addTarget:self action:@selector(clickedExcellentButton) forControlEvents:UIControlEventTouchDown]; // or TouchUp, how ever you like
        [goodButton addTarget:self action:@selector(clickedGoodButton) forControlEvents:UIControlEventTouchDown];
        [fineButton addTarget:self action:@selector(clickedFineButton) forControlEvents:UIControlEventTouchDown];
        [dorrButton addTarget:self action:@selector(clickedWoButton) forControlEvents:UIControlEventTouchDown];
    }

    return self;
}

-(UIColor *)selectionColor
{
    return [UIColor colorWithRed:39/255.0 green:174/255.0 blue:96/255.0 alpha:100];
}

-(void)resetSelection
{
    excellentButton.backgroundColor = [UIColor clearColor];
    goodButton.backgroundColor = [UIColor clearColor];
    fineButton.backgroundColor = [UIColor clearColor];
    dorrButton.backgroundColor = [UIColor clearColor];
}

-(void)clickedExcellentButton
{
    [self resetSelection];
    excellentButton.backgroundColor = [self selectionColor];
    NSString *key=[NSString stringWithFormat:@"%ld",(long)indexPath.row];
    [sharedManager.ratingDic setValue:@"Excellent" forKey:key]; // if you have your sharedManager object here. If you cannot access it from here, you have to forward it or give the cell a reference to it
}

-(void)clickedGoodButton
{
    [self resetSelection];
    goodButton.backgroundColor = [self selectionColor];
    NSString *key=[NSString stringWithFormat:@"%ld",(long)indexPath.row];
    [sharedManager.ratingDic setValue:@"Good" forKey:key];
}

...

要么

- (IBAction)goodButton:(id)sender {

UIButton *button = (UIButton *)sender; // this is the button that was clicked
// [...]
for(UIButton *ctrl in [button.superview subviews]) // button.superview get the view that holds him. Subviews all the others in his layer
{
    if([ctrl isKindOfClass:[UIButton class]])
    {
        ctrl.backgroundColor = [UIColor clearColor];
    }
}
button.backgroundColor = [UIColor colorWithRed:39/255.0 green:174/255.0 blue:96/255.0 alpha:100];

我创建了一个自定义的tableview单元格,当按下按钮时,这四个按钮使用相同的IBAction。 然后更改该按钮的背景颜色。 有用。

的TableView

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return 2;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *cellID = @"cell";
TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
if (!cell) {
    cell = [[NSBundle mainBundle] loadNibNamed:@"TableViewCell" owner:self options:nil][0];
}
return cell;
}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return 1;
}

按钮单击代码

- (IBAction)actionButtonPressed:(UIButton *)sender {
[sender setBackgroundColor:[UIColor redColor]];
}

您不需要使用按钮层就可以设置backgroundColor(我假设您可以通过cell.Button访问按钮)

cell.goodButton.backgroundColor = [[UIColor colorWithRed:39/255.0 green:174/255.0 blue:96/255.0 alpha:100] CGColor ];
...

cell.betterButton.backgroundColor = [UIColor clearColor];
cell. bestButton.backgroundColor = [UIColor clearColor];
cell. worstButton.backgroundColor = [UIColor clearColor];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM