处理 UITableViewHeaderFooterView 内的 UIImage 的点击

问题描述 投票:0回答:1

我有一个自定义的

UITableViewHeaderFooterView
,称为
ProfileHeaderView
。它确实包含称为
UIImageView
userImage
。我如何访问此
userImage
以添加点击手势。 这是我的标题的代码片段:

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
    }()
...
}

这是我在

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
    }

我确实收到以下错误:

Value of type 'UITableViewHeaderFooterView' has no member 'userImage'
。为什么?我想我将 userImage 添加到我的标题中。但事实证明将其添加到我的自定义标头中还不够。有没有任何解决方法或解决方案可以添加
tapGesture
到它?

swift uitableview uiview uikit uitapgesturerecognizer
1个回答
0
投票

dequeueReusableHeaderFooterView
返回
UITableViewHeaderFooterView
,它没有
userImage
属性,因此会出现错误。

您所需要做的就是将

dequeueReusableHeaderFooterView
的结果转换为
ProfileHeaderView

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
}

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

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

© www.soinside.com 2019 - 2024. All rights reserved.