自定义 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
类中定义IBoutlet
s 并将它们连接起来。
然后您将 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 上的披露按钮设置目标