在 TableView 的自定义单元格中添加单选按钮并且无法访问外部

Posted

技术标签:

【中文标题】在 TableView 的自定义单元格中添加单选按钮并且无法访问外部【英文标题】:Adding Radio Button in Custom Cell of TableView and unable to access outside 【发布时间】:2012-09-03 13:59:58 【问题描述】:

我在 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];

【问题讨论】:

【参考方案1】:

试着把这行改成这个;-

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

to

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

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

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

【讨论】:

以上是关于在 TableView 的自定义单元格中添加单选按钮并且无法访问外部的主要内容,如果未能解决你的问题,请参考以下文章

iOS:如何从 tableview 的自定义单元格中的 UITextField 访问值

如何在 Tableview 单元格中获取 UIButton 的位置,并在 Swift 中添加目标?

如何在swift ios中的自定义TableView单元格中显示多个字符串值到多个标签?

UITableview 默认单元格中的自定义分隔符显示意外行为

在 Swift 中的自定义单元格中存储/检索核心数据

如何在 swift 3 中的 tableview 单元格中添加带有自定义视图的 collectionView?