4

我在 UITableView 的自定义单元格中添加单选按钮并在其上调用方法来更改其图像或背景图像。我能够设置来自发件人的选定按钮图像,但我想将其他按钮设置为我无法设置的原始位置,因为以下功能需要看起来像单元格中的正确单选按钮

我在此方法中获取正确的索引路径时也面临问题 - (void) TableRadioButtonSelection:(id)sender;

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

static NSString *RadioIdentifier = @"RadioCellIdentifier";

        RadioBtnCell *myRadiocell = (RadioBtnCell *)[tableView dequeueReusableCellWithIdentifier:RadioIdentifier];
        if(myRadiocell == nil) {
            [[NSBundle mainBundle] loadNibNamed:@"RadioBtnCell" owner:self options:nil];
            myRadiocell = radioCell;

            //[myRadiocell.radioBtn1 setBackgroundImage:[UIImage imageNamed:@"radiobtn.png"] forState:UIControlStateNormal];
            myRadiocell.radioBtn1.tag = ButtonTag;
            //[myRadiocell.radioBtn2 setBackgroundImage:[UIImage imageNamed:@"radiobtn.png"] forState:UIControlStateNormal];
             myRadiocell.radioBtn2.tag = ButtonTag1;
            //[myRadiocell.radioBtn3 setBackgroundImage:[UIImage imageNamed:@"radiobtn.png"] forState:UIControlStateNormal];
             myRadiocell.radioBtn3.tag = ButtonTag2;
            myRadiocell.tag = RadioTag;

            [myRadiocell.radioBtn1 addTarget:self action:@selector(TableRadioButtonSelection:) forControlEvents:UIControlEventTouchUpInside];
            [myRadiocell.radioBtn2 addTarget:self action:@selector(TableRadioButtonSelection:) forControlEvents:UIControlEventTouchUpInside];
            [myRadiocell.radioBtn3 addTarget:self action:@selector(TableRadioButtonSelection:) forControlEvents:UIControlEventTouchUpInside];

            myRadiocell.backgroundView.backgroundColor = [UIColor clearColor];
            self.radioCell = nil;

        }

return  myRadiocell;

}

- (void) TableRadioButtonSelection:(id)sender {

    //RadioBtnCell *buttonCell = (RadioBtnCell*)[[btn superview] superview];

    RadioBtnCell *cell = (RadioBtnCell *)[self.questionTblView viewWithTag:RadioTag];
    UIButton *mybtn = (UIButton *)[cell.contentView viewWithTag:ButtonTag];
    UIButton *mybtn1 = (UIButton *)[cell.contentView viewWithTag:ButtonTag1];
    UIButton *mybtn2 = (UIButton *)[cell.contentView viewWithTag:ButtonTag2];

    [mybtn setBackgroundImage:[UIImage imageNamed:@"radiobtn.png"] forState:UIControlStateNormal];
    [mybtn1 setBackgroundImage:[UIImage imageNamed:@"radiobtn.png"] forState:UIControlStateNormal];
    [mybtn2 setBackgroundImage:[UIImage imageNamed:@"radiobtn.png"] forState:UIControlStateNormal];

     //NSLog(@"%@",[cell subviews]);
    UIView* mysubview = [cell.contentView viewWithTag:ButtonTag]; // Make sure your UITextField really *is* the last object you added.
    UIView* mysubview1 = [cell.contentView viewWithTag:ButtonTag1];
    UIView* mysubview2 = [cell.contentView viewWithTag:ButtonTag2];

   // I am unable to set Image of other buttons apart from sender.

    //for(UIView *item in [mysubview subviews]) {

        if ([mysubview isKindOfClass:[UIButton class]]) {
            UIButton *newBtn = (UIButton*)mysubview;
            UIButton *newBtn1 = (UIButton*)mysubview1;
            UIButton *newBtn2 = (UIButton*)mysubview2;

            NSLog(@"OK %@",newBtn);
            //[newBtn setBackgroundImage:[UIImage imageNamed:@"radiobtn.png"] forState:UIControlStateNormal];
            [newBtn setImage:[UIImage imageNamed:@"radiobtn.png"] forState:UIControlStateNormal];
            [newBtn1 setImage:[UIImage imageNamed:@"radiobtn.png"] forState:UIControlStateNormal];
            [newBtn2 setImage:[UIImage imageNamed:@"radiobtn.png"] forState:UIControlStateNormal];

        }
    //}

    NSIndexPath *indexPath = [self.questionTblView indexPathForCell:cell]; 
    NSLog(@"%d",indexPath.row);

    //  Below code is setting Image of selected Button properly as checked but above code for making button onto original state is not setting button image or background image

    UIButton *btn = (UIButton *)sender;
    [btn setImage:[UIImage imageNamed:@"radiobtn_chk.png"] forState:UIControlStateNormal];
    //[btn setBackgroundImage:[UIImage imageNamed:@"radiobtn_chk.png"] forState:UIControlStateNormal];
}
4

1 回答 1

0

尝试将此行更改为此;-

RadioBtnCell *cell = (RadioBtnCell *)[self.questionTblView viewWithTag:RadioTag];

to

     RadioBtnCell *cell = (RadioBtnCell *)[self.questionTblView cellForRowAtIndexPath:*indexPathofthecell*];

通过这种方式,您可以访问表格视图单元格。之后,您可以从单元格内容视图中获取按钮并进行进一步编码。

假设如果您不知道 indexPath,那么您可以从表格视图的 rowNumber 创建 indexPath(我认为您已将表格行号存储在 RadioTag 中,如果是,则可以将此字段用作参数)。

于 2012-09-04T06:38:04.350 回答