簡體   English   中英

在iOS表格單元格中單擊按鈕更改圖像

[英]Change Image on click button in table cell in ios

在此處輸入圖片說明

單擊按鈕時,我想更改按鈕上的圖像。 該按鈕位於表格單元格中。 圖像正在成功更改。 但是,當默認情況下表格滾動時,每5個單元格的按鈕圖像也發生了變化,而我沒有更改。 表示表中新的單元格,不願更改。 該單元是可重用的,並由情節提要創建。

如何使用該按鈕作為切換按鈕。 我該如何實現。

- (NSIndexPath *)indexPathWithSubview:(UIView *)subview {

        while (![subview isKindOfClass:[UITableViewCell self]] && subview) {
            subview = subview.superview;
        }
        return [self.table indexPathForCell:(UITableViewCell *)subview];
    }

    - (IBAction)btnCheckedCellPressed:(id)sender{
        NSIndexPath *myIP = [self indexPathWithSubview:(UIButton *)sender];
        MyWantsTableViewCell* cell = (MyWantsTableViewCell *)[self.table cellForRowAtIndexPath:myIP];
        if (cell.btnEdit.currentImage == [UIImage imageNamed:@"checkbox-active"]) {
            [cell.btnEdit setImage:[UIImage imageNamed:@"checkbox-deactive"]
                          forState:UIControlStateNormal];
        } else {
            [cell.btnEdit setImage:[UIImage imageNamed:@"checkbox-active"]
                          forState:UIControlStateNormal];
        }
    //    [self.table beginUpdates];
    //    [self.table reloadRowsAtIndexPaths:@[myIP] withRowAnimation:UITableViewRowAnimationFade];
    //    [self.table endUpdates];

    }

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    MyWantsTableViewCell *cell=nil;

    static NSString *AutoCompleteRowIdentifier = @"MyWantsTableViewCellEdit";

    cell = [tableView dequeueReusableCellWithIdentifier:AutoCompleteRowIdentifier forIndexPath:indexPath];

    if (cell == nil)
    {
        cell = [[MyWantsTableViewCell alloc]
                initWithStyle:UITableViewCellStyleDefault reuseIdentifier:AutoCompleteRowIdentifier];
        [[AsyncImageLoader sharedLoader] cancelLoadingImagesForTarget:cell.imgProduct];
    }
    cell.selectionStyle = UITableViewCellAccessoryNone;

    cell.btnEdit.tag = indexPath.row;
    return cell;
}

使用如下所述的簡單方法,並使用一個對象保留當前選擇,因為如果滾動UITableView ,它將保留

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{



   [cell.btnEdit setImage:[UIImage imageNamed:@"checkbox-active"]
                          forState:UIControlStateNormal];
   [cell.btnEdit setImage:[UIImage imageNamed:@"checkbox-deactive"]
                          forState:UIControlStateSelected];

   MyClass *obj=[arr objextAtIndex:indexPath.row];

   cell.btnEdit.selected=obj.selected;


}

- (IBAction)btnCheckedCellPressed:(id)sender{
        NSIndexPath *myIP = [self indexPathWithSubview:(UIButton *)sender];
        MyWantsTableViewCell* cell = (MyWantsTableViewCell *)[self.table cellForRowAtIndexPath:myIP];

        cell.btnEdit.selected=!cell.btnEdit.selected;

        MyClass *obj=[arr objectAtIndex:myIP.row];
        obj.selected=!obj.selected;

}

樣品

在此處找到幫助的樣本

1.. Take a NSInteger variable like "selectedBtn" and initialize it with -1, in viewDidLoad(). 
2.. go to cellForRowAtIndexPath() set button.tag == indexpath.row; 
3.. Now in btnCheckedCellPressed() set that selectedBtn variable with tag value of that sender button. 
4.. Now again go to cellForRowAtIndexPath() and place a check 

if(cell.btnEdit.tag == selectedBtn)
    // set selected image on button 
else
   // set unselected Image 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM