在 UITableViewHeaderFooterView 中处理 UIImage 的点击

Handling a tap of UIImage inside of UITableViewHeaderFooterView

提问人:Philipp 提问时间:9/13/2023 更新时间:9/13/2023 访问量:20

问:

我有一个习俗,叫做.它确实包含称为 .如何访问它以添加点击手势。 这是我的标题的一段代码:UITableViewHeaderFooterViewProfileHeaderViewUIImageViewuserImageuserImage

class ProfileHeaderView: UITableViewHeaderFooterView {
    
    // MARK: - Subviews
    
    private var statusText: String = ""
    
    lazy var userImage: UIImageView = {
        let imageView = UIImageView(image: UIImage(named: me.login))
                
        imageView.layer.cornerRadius = 45
        imageView.clipsToBounds = true
                
        imageView.translatesAutoresizingMaskIntoConstraints = false
        
        imageView.isUserInteractionEnabled = true
        
        return imageView
    }()
...
}

这是我在 a 中使用的代码:UIViewController

    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        if section == 0 {
            let view = tableView.dequeueReusableHeaderFooterView(withIdentifier: "ProfileHeaderView")
            view?.isUserInteractionEnabled = true
            
            
            let tapPicture = UITapGestureRecognizer(
                target: self,
                action: #selector(didTapPicture)
            )
            
            tapPicture = 1
            view?.userImage.addGestureRecognizer(tapPicture)
            return view
        }
        return nil
    }

我确实收到以下错误:。为什么?我以为我将userImage添加到我的标题中。但事实证明,将其添加到我的自定义标题中是不够的。是否有任何解决方法或解决方案可以添加到其中?Value of type 'UITableViewHeaderFooterView' has no member 'userImage'tapGesture

Swift UITableView UIView UIKIT UITapGestureRecognizer

评论


答:

1赞 HangarRash 9/13/2023 #1

dequeueReusableHeaderFooterView返回没有属性的返回,因此出现错误。UITableViewHeaderFooterViewuserImage

您只需要将结果转换为 。dequeueReusableHeaderFooterViewProfileHeaderView

if let view = tableView.dequeueReusableHeaderFooterView(withIdentifier: "ProfileHeaderView") as? ProfileHeaderView {
    view.isUserInteractionEnabled = true
    
    let tapPicture = UITapGestureRecognizer(
        target: self,
        action: #selector(didTapPicture)
    )
    
    tapPicture = 1
    view.userImage.addGestureRecognizer(tapPicture)
    return view
}

这样做的一个问题是,当用户滚动时,您最终会向标题添加越来越多的手势识别器。

更好的整体解决方案是在自定义标头类中设置手势,并定义委托或回调属性。然后,当自定义标头处理点击时,它可以调用委托或回调,以便视图控制器可以根据需要执行操作。

评论

0赞 Philipp 9/13/2023
谢谢!它帮了大忙!您能否举例说明如何处理 ProfileHeaderView 中的点击,然后在 UIViewController 中触发操作?我不确定我是否知道如何从那里委派它