如何在目标 c 中的视图控制器上获取自定义 TableViewCell 值

Posted

技术标签:

【中文标题】如何在目标 c 中的视图控制器上获取自定义 TableViewCell 值【英文标题】:How to get custom TableViewCell value on view controller in objective c 【发布时间】:2017-01-06 04:51:14 【问题描述】:

我是 ios 新手,我面临着从自定义表格视图单元格值获取值到视图控制器的问题。

在我的自定义表格视图单元格中,单击时有 4 个按钮我在 customtableviewcell 的 UILabel 中获取值我想将 UILabel 值传递给视图控制器。

我的代码在customtableviewcell.m中是这样的

- (void)awakeFromNib 


    passbtn.layer.cornerRadius = passbtn.bounds.size.width / 2.0;// this value vary as per your desire
    passbtn.clipsToBounds = YES;

    failbtn.layer.cornerRadius = failbtn.bounds.size.width / 2.0;// this value vary as per your desire
    failbtn.clipsToBounds = YES;

    wipbtn.layer.cornerRadius = wipbtn.bounds.size.width / 2.0;// this value vary as per your desire
    wipbtn.clipsToBounds = YES;

    nabtn.layer.cornerRadius = nabtn.bounds.size.width / 2.0;// this value vary as per your desire
    nabtn.clipsToBounds = YES;


    infobtn.layer.cornerRadius = infobtn.bounds.size.width / 2.0;// this value vary as per your desire
    [[infobtn layer] setBorderWidth:1.0f];
    infobtn.layer.borderColor =[[UIColor blueColor] CGColor];
    infobtn.clipsToBounds = YES;

    passlbl.hidden=YES;
    faillbl.hidden=YES;
    warninglbl.hidden=YES;
    nalbl.hidden=YES;
    actuallbl.hidden=YES;

    // Initialization code

- (void)textViewDidEndEditing:(UITextView *)theTextView

    if (![textView1 hasText]) 
        lbl.hidden = NO;
    


- (void) textViewDidChange:(UITextView *)textView

    if(![textView hasText]) 
        lbl.hidden = NO;
    
    else
        lbl.hidden = YES;
      



-(IBAction)passbtnClick:(id)sender

    passbtn.backgroundColor=[UIColor greenColor];
    failbtn.backgroundColor=[UIColor lightGrayColor];
    wipbtn.backgroundColor=[UIColor lightGrayColor];
    nabtn.backgroundColor=[UIColor lightGrayColor];

    actuallbl.text=passlbl.text;
    ActualString=actuallbl.text;
    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
    [defaults setObject:ActualString forKey:@"ActualStringCustom"];


-(IBAction)failbtnClick:(id)sender

    passbtn.backgroundColor=[UIColor lightGrayColor];
    failbtn.backgroundColor=[UIColor redColor];
    wipbtn.backgroundColor=[UIColor lightGrayColor];
    nabtn.backgroundColor=[UIColor lightGrayColor];

    actuallbl.text=faillbl.text;
    ActualString=actuallbl.text;
    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
    [defaults setObject:ActualString forKey:@"ActualStringCustom"];

    UIAlertView *testAlert = [[UIAlertView alloc] initWithTitle:@"Fail!"
                                                        message:audittitlelbl.text
                                                       delegate:self
                                              cancelButtonTitle:nil
                                              otherButtonTitles:@"Done", nil];
    textView1 = [UITextView new];
    lbl = [[UILabel alloc] initWithFrame:CGRectMake(10.0, 0.0,90.0, 34.0)];


    [lbl setText:@"Enter Remark"];
    [lbl setFont:[UIFont systemFontOfSize:12]];
    [lbl setBackgroundColor:[UIColor clearColor]];
    [lbl setTextColor:[UIColor lightGrayColor]];
    textView1.delegate = self;

    [textView1 addSubview:lbl];

    [testAlert setValue: textView1 forKey:@"accessoryView"];

    [testAlert show];

-(IBAction)wipbtnClick:(id)sender

    passbtn.backgroundColor=[UIColor lightGrayColor];
    failbtn.backgroundColor=[UIColor lightGrayColor];
    wipbtn.backgroundColor=[UIColor orangeColor];
    nabtn.backgroundColor=[UIColor lightGrayColor];

    actuallbl.text=warninglbl.text;
    ActualString=actuallbl.text;
    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
    [defaults setObject:ActualString forKey:@"ActualStringCustom"];

    UIAlertView *testAlert = [[UIAlertView alloc] initWithTitle:@"Warning!"
                                                        message:audittitlelbl.text
                                                       delegate:self
                                              cancelButtonTitle:nil
                                              otherButtonTitles:@"Done", nil];
    textView1 = [UITextView new];
    lbl = [[UILabel alloc] initWithFrame:CGRectMake(10.0, 0.0,90.0, 34.0)];


    [lbl setText:@"Enter Remark"];
    [lbl setFont:[UIFont systemFontOfSize:12]];
    [lbl setBackgroundColor:[UIColor clearColor]];
    [lbl setTextColor:[UIColor lightGrayColor]];
    textView1.delegate = self;

    [textView1 addSubview:lbl];

    [testAlert setValue: textView1 forKey:@"accessoryView"];

    [testAlert show];


- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex 

    if(buttonIndex==0)
    

    

-(IBAction)nabtnClick:(id)sender

    passbtn.backgroundColor=[UIColor lightGrayColor];
    failbtn.backgroundColor=[UIColor lightGrayColor];
    wipbtn.backgroundColor=[UIColor lightGrayColor];
    nabtn.backgroundColor=[UIColor blueColor];
    actuallbl.text=nalbl.text;
    ActualString=actuallbl.text;
    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
    [defaults setObject:ActualString forKey:@"ActualStringCustom"];


在这段代码中,我正在更改按钮的颜色,并从 UILabel 中的 Web 服务中获得价值,即实际。现在我想在视图控制器中获取该值。如何执行任何建议

如图所示,我正在使用自定义表格视图单元格,并且我希望 Passbtn 在视图控制器中单击值。如果我点击 Passbtn 我在实际中得到值 1 但在自定义表格视图单元格中,那么我怎样才能在视图控制器中获得这个值。

查看控制器.m

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 
         static NSString *STI=@"STI";
         AuditTableViewCell *cell = (AuditTableViewCell *)[tableView dequeueReusableHeaderFooterViewWithIdentifier:STI];
         if (cell == nil)
         
                NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"AuditTableViewCell" owner:self options:nil];
                cell = [nib objectAtIndex:0];
                cell.accessoryType=UITableViewCellAccessoryNone;
         
         cell.audittitlelbl.text=[NSString stringWithFormat:@"%@",[idarray objectAtIndex:indexPath.row]];
         cell.passlbl.text=[NSString stringWithFormat:@"%@",[Passarray objectAtIndex:indexPath.row]];
         cell.faillbl.text=[NSString stringWithFormat:@"%@",[Failarray objectAtIndex:indexPath.row]];
         cell.warninglbl.text=[NSString stringWithFormat:@"%@",[Warningarray objectAtIndex:indexPath.row]];
         cell.nalbl.text=[NSString stringWithFormat:@"%@",[NAarray objectAtIndex:indexPath.row]];
         return cell;

提前致谢!

【问题讨论】:

***.com/a/41218669/6656894 参考这个答案你有你的想法 @HimanshuMoradiya 我已经创建了按钮。只是我想将值传递给视图控制器。我正在使用 NSUserDefault 但不知道在视图控制器中在哪里调用它。因为我没有在表视图的 didselect 方法中注意到。 您必须将数据传递给您的下一个控制器,对吗?从您的 -(IBAction)wipbtnClick:(id)sender 按钮点击 @HimanshuMoradiya 对。但不在同一视图控制器上的下一个视图控制器上 -(IBAction)wipbtnClick:(id)sender 按钮单击是在自定义表格视图单元格上。 兄弟,您是否使用 tableview 数据源和 delegates 方法更新了您的问题。 【参考方案1】:

您可以在视图控制器“cellForRowAtIndexPath”方法中以编程方式添加选择器。现在您可以调用视图控制器方法,并且此方法将 sender 作为参数,然后您可以从 sender 的 superview 获取单元格。现在,您已经点击了该单元格按钮的单元格,您可以从单元格中获取 uilabel 文本的值。

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

    static NSString *cellIdentifier = @"cell";
    CartTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];

    CartModel *model = [arrCartData objectAtIndex:indexPath.row];

    cell.lblCartBrandName.text=model.strBrandName;

    [cell.btnQuantity addTarget:self action:@selector(btnQuantityPressed:) forControlEvents:UIControlEventTouchUpInside];


    return cell;




-(void)btnQuantityPressed:(UIButton *)sender 

      CartTableViewCell *cell = sender.superview.superview;
    NSLog("%@",cell.lblCartBrandName.text);

【讨论】:

UITableViewCellContentViewactuallbl]:无法识别的选择器发送到实例显示错误。 Showing uncomparable pointer analize Audittableviewcell with UIView at this line CartTableViewCell *cell = sender.superview CartTableViewCell *cell = (CartTableViewCell *)sender.superview.superview 哇,伙计,您的代码运行真的是您救了我。谢谢朋友。 可以,代码是 NSIndexPath *indexPath = [self.tblViewCart indexPathForCell:cell];【参考方案2】:

首先将按钮输出到 AuditTableViewCell 和 在 cellForRowAtindexPath 中添加按钮的 addTarget

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

        static NSString *STI=@"STI";
        AuditTableViewCell *cell = (AuditTableViewCell *)[tableView dequeueReusableHeaderFooterViewWithIdentifier:STI];
        [cell.passbtn addTarget:self  action:@selector(myAction:)forControlEvents:UIControlEventTouchUpInside];
        cell.passbtn.tag = indexPath.Row;
 

在这里您将获得 Cell 的 indexValue 并从 yourArray 中获取标签值

-(void)myAction:(UIButton *)sender 
 
  NSlog(@"%f",sender.tag);
  NSlog(@"%@",[Passarray objectAtIndex:sender.tag]);

 

您可以从 myAction 推送到视图控制器并将值传递给视图控制器

【讨论】:

以上是关于如何在目标 c 中的视图控制器上获取自定义 TableViewCell 值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UISearchController 中使用自定义视图控制器获取结果?

自定义尺寸 iPad 拆分视图

如何在 iOS 的 didselectrowatindexpath 中触发按钮操作方法,目标 c

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

找到数据时表格视图中的自定义标签文本?目标c

Swift 中的单元测试 | IOS 故事板 |无法转换目标 c 中定义的视图控制器类