如何在多个 UITableView 单元格之间共享相同的 UIView

Posted

技术标签:

【中文标题】如何在多个 UITableView 单元格之间共享相同的 UIView【英文标题】:How To Share Same UIView Between Multiple UITableView Cells 【发布时间】:2017-10-28 17:39:24 【问题描述】:

目标

当用户点击 3 个蓝色按钮中的任何一个时,所有按钮都会变为相同的颜色。

注意:这是对共享进度视图问题的抽象,因此在我的三行中只共享(或模仿)一个 UIView 很重要

这是一个可编译的 Swift 项目:

import UIKit

class ToggleButton: UIButton 
    var connectedView: UIView?
    func onPress() 
        self.isHidden = true
        self.connectedView?.isHidden = false
    


class ViewController : UIViewController, UITableViewDelegate, UITableViewDataSource 

    var tableView: UITableView = UITableView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))

    var myView: UIView? = nil
    var toggleBtn: ToggleButton? = nil

    override func viewDidLoad() 
        self.setupTableView()
    

    fileprivate func setupTableView() 
        self.tableView.dataSource = self
        self.tableView.delegate = self

        self.tableView.backgroundColor = UIColor.white
        self.tableView.isOpaque = true

        self.view.addSubview(self.tableView)
    

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return 3
    

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        let cell = UITableViewCell(style: .default, reuseIdentifier: "CellIdentifier")

        let frame = CGRect(x: 10, y: 10, width: 30, height: 30)

        if let view = self.myView, let btn = self.toggleBtn 
            cell.addSubview(view)
            cell.addSubview(btn)
         else 
            let myView = UIView(frame: frame)
            myView.backgroundColor = UIColor.green
            myView.isHidden = true

            cell.addSubview(myView)

            let toggleBtn = ToggleButton(frame: frame)
            toggleBtn.backgroundColor = UIColor.blue
            toggleBtn.addTarget(self, action: #selector(onPress), for: .touchUpInside)
            toggleBtn.connectedView = myView

            cell.addSubview(toggleBtn)
        

        return cell
    

    @objc func onPress(_ sender: Any) 
        if let button = sender as? ToggleButton 
            button.onPress()
        
    

任何帮助表示赞赏。

【问题讨论】:

【参考方案1】:

UITableViewCell 的概念被制作得非常独立。

所以你唯一能做的就是在你的 ViewController 中有一个 bool 标志,然后你用这个标志初始化你的 3 个单元格。

最后,每次按下按钮时,您都会切换标志并重新加载您的 tableView。

【讨论】:

以上是关于如何在多个 UITableView 单元格之间共享相同的 UIView的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UITableView 中一次添加多个单元格的边框?

iOS:减少两个单元格之间的空间:UITableView

如何在 UITableView 中的单元格之间添加分隔符单元格/uiview?

Swift UIEdgeInsets 无法正常工作,如何在单元格之间添加间距?

如何阻止 UITableview 一次滚动多个单元格

如何从具有多个单元格原型的 UITableView 中捕获单元格数据?