簡體   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