如何基于超级视图组件重新定位tableView

时间:2019-04-17 07:34:29

标签: ios swift uitableview

我有过滤器tableView,这是可扩展的tableView。当用户单击IndexPath [2,0]第三部分第1行中的按钮时,我想在该位置上创建更多单个选择tableView。为此,我得到了btn x和y的位置,并在创建tableView的同时创建了透明视图。但是该新tableView的位置不合适。

当用户在tableView indexPath [2,0]中点击时,如何在特定位置创建新的tableView。

1 个答案:

答案 0 :(得分:1)

假设您要在父视图上显示“透明视图”和“单选表视图”。

  1. 为您的控制器类创建一个委托以获取当前单元格视图

    protocol MyCellDelegate: class {
       func didTapButton(forCell cell: MyTableViewCell)
    }
    
    class MyTableViewCell: UITableViewCell {
    
       weak var delegate: MyCellDelegate?
    
       @IBAction func didTapButton(_ sender: UIButton) {
         delegate?.didTapButton(forCell: self)
       }
    }
    
    class MyViewController: UIViewController, UITableViewDataSource, MyCellDelegate {
    //...
    
      func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
         let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! MyTableViewCell
         cell.delegate = self
      }
    
      func didTapButton(forCell cell: MyTableViewCell) {
      //
      }
    }
    
  2. 在委托方法内为透明视图创建框架并将其添加(将包含您的单个选择表视图)

    func didTapButton(forCell cell: MyTableViewCell) {
       let buttonFrame = cell.convert(cell.myButton.frame, to: self.view)
       let transparentView = UIView(frame: CGRect(x: buttonFrame.origin.x,
                                               y: buttonFrame.maxY,
                                               width: buttonFrame.width,
                                               height: 128))
       let singleSelectTableView = UITableView(frame: CGRect(origin: .zero, size: transparentView.frame.size))
       // setup table view data source code here (make a separate class)
       transparentView.addSubview(singleSelectTableView)
       self.view.addSubview(transparentView)
    }