簡體   English   中英

單擊時更改單元格上按鈕的圖像

[英]Change the image of a button that's on a cell upon click

在我的單元格中,我有3個按鈕,當用戶單擊每個按鈕時,將觸發以下3種方法。

在此處輸入圖片說明

- (void) but1:(id) sender{
    NSLog(@"Touched 1 %ld",(long)[(UIButton *)sender tag]);

}

- (void) but2:(id) sender{
    NSLog(@"Touched 2 %ld",(long)[(UIButton *)sender tag]);

}

- (void) but3:(id) sender{
    NSLog(@"Touched 3 %ld",(long)[(UIButton *)sender tag]);

}

想象一下,用戶單擊按鈕1,然后應觸發but1方法,並且按鈕1的背景圖像也應更改。 如何在上述方法中進行此更改。

注意:我正在使用XIB文件。

我能夠訪問包含該單元格的NIB文件。

UINib *cellNib = [UINib nibWithNibName:@"MyCell" bundle:nil];
        [self.contextMenuTableView registerNib:cellNib forCellReuseIdentifier:@"cell"];

現在如何訪問他觸摸的按鈕並更改圖像?

更新

這是一個表格視圖。 在每個單元格中有3個按鈕,我應該能夠選擇和取消選擇表格中的這些按鈕之一。

例如,如果只能選擇單元格中的1個按鈕 當選擇單元格時,我將顯示圖像。 如果不是,我將顯示默認圖像。

在此處輸入圖片說明

您可以將發件人的圖像更改為

- (void) but1:(id) sender{
    NSLog(@"Touched 1 %ld",(long)[(UIButton *)sender tag]);
    [((UIButton *)sender) setImage:[UIImage imageNamed:"image.png"] forState:UIControlStateNormal]
}

祝好運

嘗試類似

          UIImage *btnImage = [UIImage imageNamed:@"image.png"];
          [btnTwo setImage:btnImage forState:UIControlStateNormal];

要知道按下了哪個按鈕,可以為每個按鈕設置標簽。 從該標簽中,您將獲得粘貼了哪個按鈕的信息

在界面部分..

整數計數

在viewDidLoad中

計數= 0;

- (IBAction)ButtonClicked:(id)sender {



    NSLog(@"Touched 1 %ld",(long)[(UIButton *)sender tag]);
    if(count%2==0)
    {
        [((UIButton *)sender) setBackgroundImage:[UIImage imageNamed:@"imageA.png"] forState:UIControlStateNormal];
    }
    else
   {
      [((UIButton *)sender) setBackgroundImage:[UIImage imageNamed:@"imageB.png"] forState:UIControlStateNormal];
   }


    [(UIButton *)sender setTitle:@"" forState:UIControlStateNormal];
    count=count+1;

}
- (void) but1:(id) sender{

  [but1 setBackgroundImage:[UIImage imageNamed:@"blue_button.png"]
                            forState:UIControlStateNormal];
  NSLog(@"Touched 1 %ld",(long)[(UIButton *)sender tag]);

 }

試試這個代碼,這可能對您有幫助

也許可以這樣存檔

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    UIButton *btn1 = (UIButton *) [cell viewWithTag:1] ;
    UIButton *btn2 = (UIButton *) [cell viewWithTag:2];
    UIButton *btn3 = (UIButton *) [cell viewWithTag:3];
    [btn1 setTag:((indexPath.row*10)+1)];
    [btn1  setTag:((indexPath.row*10)+2)];
    [btn3 setTag:((indexPath.row*10)+3)];
    [btn1 addTarget:self action:@selector(but1:) forControlEvents:UIControlEventTouchDown];
    [btn2 addTarget:self action:@selector(but2:) forControlEvents:UIControlEventTouchDown];
    [btn3 addTarget:self action:@selector(but3:) forControlEvents:UIControlEventTouchDown];
    return cell;
}

- (void) but1:(UIButton *) sender{
    NSLog(@"Touched 1 %ld",((long)[(UIButton *)sender tag])%10);
    [sender setBackgroundImage:[UIImage imageNamed:@"newImage.png"] forState:UIControlStateNormal];
    NSInteger row = ((long)[sender tag])/10;
    NSIndexPath *indexPathOfYourCell = [NSIndexPath indexPathForRow:row inSection:0];
    [self.tableview beginUpdates];
    [self.tableview reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPathOfYourCell] withRowAnimation:UITableViewRowAnimationNone];
    [self.tableview endUpdates];
}

- (void) but2:(UIButton *) sender{
    NSLog(@"Touched 2 %ld",((long)[(UIButton *)sender tag])%10);
    [sender setBackgroundImage:[UIImage imageNamed:@"newImage.png"] forState:UIControlStateNormal];
    NSInteger row = ((long)[sender tag])/10;
    NSIndexPath *indexPathOfYourCell = [NSIndexPath indexPathForRow:row inSection:0];
    [self.tableview beginUpdates];
    [self.tableview reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPathOfYourCell] withRowAnimation:UITableViewRowAnimationNone];
    [self.tableview endUpdates];
}

- (void) but3:(UIButton *) sender{
    NSLog(@"Touched 3 %ld",((long)[(UIButton *)sender tag])%10);
    [sender setBackgroundImage:[UIImage imageNamed:@"newImage.png"] forState:UIControlStateNormal];
    NSInteger row = ((long)[sender tag])/10;
    NSIndexPath *indexPathOfYourCell = [NSIndexPath indexPathForRow:row inSection:0];
    [self.tableview beginUpdates];
    [self.tableview reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPathOfYourCell] withRowAnimation:UITableViewRowAnimationNone];
    [self.tableview endUpdates];
}

享受編碼!

你也可以用這個

button1.tag = 0;
button2.tag = 1;
button3.tag = 2;
[button1 setImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateNormal];
[button1 setImage:[UIImage imageNamed:@"selected_image.png"] forState:UIControlStateSelected];
[button2 setImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateNormal];
[button2 setImage:[UIImage imageNamed:@"selected_image.png"] forState:UIControlStateSelected];
[button3 setImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateNormal];
[button3 setImage:[UIImage imageNamed:@"selected_image.png"] forState:UIControlStateSelected];

向所有按鈕添加一個公共選擇器( buttonClicked:並實現選擇器,如下所示

- (void)buttonClicked:(id)sender
{
    [button1 setSelected:NO];
    [button2 setSelected:NO];
    [button3 setSelected:NO];

    if ([sender isKindOfClass:[UIButton class]]) 
        [sender setSelected:YES];
}

暫無
暫無

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

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