如何让 UITableViewCell 在自定义 UIView 子类上调用 setHighlighted 或 setSelected?

Posted

技术标签:

【中文标题】如何让 UITableViewCell 在自定义 UIView 子类上调用 setHighlighted 或 setSelected?【英文标题】:How can I get UITableViewCell to call setHighlighted or setSelected on custom UIView subclass? 【发布时间】:2015-11-20 17:57:04 【问题描述】:

UITableViewCell apparently calls setHighlighted:setSelected: 在符合条件的子视图(UIImageViewUILabel 等)被选中时。假设我在单元格中有一个自定义的UIView 子类,我希望它能够获得相同的调用。我已经在上面实现了setHighlighted:setSelected:,但是没有来电。是否有一些我必须声明符合的接口?还是我必须使用UITableViewCell 的自定义子类,覆盖setSelected:,然后自己浏览我的子视图?

他们不只是遍历子视图并询问每个子视图是否响应setSelected: 和/或setHighlighted:,这似乎很奇怪。

【问题讨论】:

【参考方案1】:

创建UITableViewCell 的子类(如果您使用故事板,请添加您的自定义UIView 并添加@IBOutlet)。在UITableViewCell 的子类中覆盖setSelected

class CustomTableViewCell: UITableViewCell 

     @IBOutlet weak var customView: CustomView!

     //Other methods and properties


         override func setSelected(selected: Bool, animated: Bool) 
             super.setSelected(selected, animated: animated)
             customView.setSelected(selected)
         

【讨论】:

我希望避免让单元格明确地与其特殊子视图对话。我的目标是让单元格像对待任何其他可选子视图一样对待我的自定义视图。 好的,我认为你唯一的机会是明确设置:cell.selectionStyle = .Gray。或任何其他 selectionStyle。【参考方案2】:

查看Source Code 有所帮助。经过一些试验和错误后,您需要包括以下部分:

@property (assign,getter=isHighlighted,nonatomic) BOOL highlighted;

- (void)setHighlighted:(BOOL)highlighted ;
- (BOOL)isHighlighted;

添加后,我的自定义 UIView 会收到单元格突出显示的事件。

祝你好运!

【讨论】:

以上是关于如何让 UITableViewCell 在自定义 UIView 子类上调用 setHighlighted 或 setSelected?的主要内容,如果未能解决你的问题,请参考以下文章

如何在自定义 UITableViewCell 中增加 Label 的高度

如何在自定义 UITableViewCell 中控制 UITextFields 的编辑

在自定义UITableViewCell中保持UIImageView的宽高比

如何借助 AutoLayout 在自定义 UITableviewCell 中添加自定义 UIView(xib)?

如何捕获 UIButton 事件:在自定义 UITableViewCell 实现中添加了 UIButton

如何在自定义 UITableViewCell 中创建 UIImageVIew? (迅速)