自定义 UITableViewCell 中按钮上的 IBAction

Posted

技术标签:

【中文标题】自定义 UITableViewCell 中按钮上的 IBAction【英文标题】:IBAction on a button in Custom UITableViewCell 【发布时间】:2012-03-12 09:37:08 【问题描述】:

使用 ios 5 : : : 我有一个场景,我必须创建一个带有自定义单元格的 tableView。 自定义单元格有一个名为 TainingCellController 的 UITableViewCell 子类的控制器和一个 NIB 文件 TrainingCell.xib 。而父表被放置在一个名为 TrainingController 的 UIViewController 中。

现在我很想知道 CustomCell 与接收 IBAction 或 IBOutlets 的文件所有者的关系..

在自定义单元格 NIB 文件中,我可以更改文件所有者(默认设置为 NSObject),也可以单击单元格本身并将其类从 UITableViewCell 更改为 TrainingCellContrller ..

这两个选项的适当类应该是什么? 应该在哪里定义 IBActions 和 IBOutlets(TrainingCellController 或 TrainingController)?

如果我需要在 TrainingCellController 中定义“自定义单元格中的标签”的出口,而在 TrainingController 中定义按钮操作,该怎么办?

【问题讨论】:

【参考方案1】:

您将UITableViewCell 的类设置为CustomCell 的类,您将在CustomCell 类中定义IBoutlets 并将它们连接起来。

然后您将 Xib 的文件所有者设置为您的ViewController,并在您的ViewController 中声明一个

IBOutlet CustomCell *yourClassLevelCell;

并将此 IBOutlet 连接到您的 Xib 的 UITableViewCell

现在,当您在 ViewController's 方法 cellForRowAtIndexPath 中初始化单元格时,您将手动添加目标,如下所示:

CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) 
   [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
   cell = yourClassLevelCell;
   [cell.button addTarget:self ... ];  
   //button is IBOutlet in your CustomCell class which you will have
   //connected to your Button in xib

【讨论】:

太棒了……所有杂物都清除了……!! =) 谢谢 Adil .. 顺便说一下,将自定义单元格中的按钮 IBAction 直接连接到文件的所有者(UIViewController)也可以..!! 好吧,在这种情况下,您不能在另一个 UIViewController 中使用该 UITableViewCell,您必须通过代码再次添加目标。 :)【参考方案2】:

尝试在同一个 tableView 类上使用动态按钮

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

    if (cell == nil) 
     
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"WorkRequestedCC" owner:self options:nil];

        for (id oneObject in nib) if ([oneObject isKindOfClass:[WorkRequestedCC class]])
            cell = (WorkRequestedCC *)oneObject;


    

    UILabel *Button=[[UIBUtton alloc]initWithFrame:CGRectMake(792, 13, 10, 15)];

    [Button addTarget:self action:@selector(ButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
    [cell.contentView addSubview:Button];


-(void) ButtonClicked

    //your code here
     

【讨论】:

您的代码示例包含两个散乱的大括号(第 6 行和倒数第二行)。请更正此代码以使其清晰。

以上是关于自定义 UITableViewCell 中按钮上的 IBAction的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式在 UITableViewCell 中添加自定义视图?

UIButton 不适用于自定义 UITableViewCell (Swift)

为子类 UITableViewCell 上的披露按钮设置目标

为 UITableViewCell 上的特定按钮删除 UIButton 事件的链接

UITableVIewCell 重叠图像中的自定义按钮

自定义 UITableViewCell 按钮单击