在具有许多其他视图的自定义 UITableViewCell 中为 UIButton 设置操作

Posted

技术标签:

【中文标题】在具有许多其他视图的自定义 UITableViewCell 中为 UIButton 设置操作【英文标题】:set action for UIButton in customized UITableViewCell which has many other views 【发布时间】:2016-06-24 06:04:06 【问题描述】:

我阅读了以下帖子:

How to set Action for UIButton in UITableViewCell

Add an action to a custom UITableViewCell

但是所有的解决方案都不适合我。我不确定我错过了什么; 我有一个定制的UITableViewCell,它存在于一个xib文件中,这个单元格包含一个UIImageViewUILabel,一个UIButton。我希望当用户单击 UIButton 时,它会从列表中删除当前项目,当用户选择行时,它将导航到另一个页面。

我做了什么:根据上面提出的问题,我创建了一个UIButton和addTarget,然后将按钮添加到带有[cell.contentview addsubview:button]的单元格中,可以触发按钮操作。

还有一些其他的视图,我希望在xib中布局,然后不需要用代码布局。

所以我在xib中创建了一个按钮,并为此按钮调用setTarget(我自定义的单元格类中的outlet),无法触发按钮动作。

然后我在xib中添加一个UIview作为占位符,并用代码创建一个新按钮并将按钮添加到占位符UIview中,无法触发按钮动作。

所以看来让它工作的方法必须是:

    用代码创建一个按钮;

    添加目标,然后将此按钮直接添加到单元格的内容视图中;

这似乎很烦人,因为我不想用代码来布局视图。我错过了什么吗?

【问题讨论】:

【参考方案1】:

首先在xib文件的UITableViewCellcontentView中添加一个按钮,并在customCell中创建插座。之后像这样更改cellForRowAtIndex 的代码。

[cell.btn addTarget:self action:@selector(btnTap:) forControlEvents:UIControlEventTouchUpInside];

然后创建这个btnTap 方法

- (void)btnTap:(UIButton*)sender 
     CustomCell *cell = (CustomCell*) [[sender superview] superview]; //If you have button inside another view you need to add superView on your hierarchy basis.
     NSIndexPath *indexPath = [self.tblFile indexPathForCell:cell];
     NSLog(@"Row you want to delete - %d",indexPath.row);

希望这会对你有所帮助。

【讨论】:

以上是关于在具有许多其他视图的自定义 UITableViewCell 中为 UIButton 设置操作的主要内容,如果未能解决你的问题,请参考以下文章

实现 UITableView (Slave) 的动态高度,它作为子视图添加到另一个具有动态高度的 UITableView (Master) 的自定义单元格中

UITableView 中滚动的自定义视图

如何在带有标题视图和 UITableview 的自定义视图中正确设置 UISearchbar 的动画?

UITableView中的自定义单元类与静态单元格

将 UITableViewDataSource 与具有子视图的自定义单元格一起使用

UITableView 自定义单元格按钮从主视图中选择其他按钮?