以编程方式向UITableViewFooterHeaderView添加按钮,转换到另一个视图控制器

时间:2018-02-13 21:28:54

标签: swift

Screenshot of Wikipedia iOS App

我正在尝试向标题添加一个按钮,触发向另一个视图控制器的转换,就像上面链接到维基百科iOS应用程序的屏幕截图一样。我想我会被绊倒,因为我不能(至少我不认为我可以?)“现在”,“显示”或“推”另一个视图控制器,因为我的类是UITableViewHeaderFooterView。

我是Swift的新手,希望我不会错过任何明显的东西,但任何帮助/指导都会非常感激!

以下是我的代码的简化版本:

class HeaderCell: UITableViewHeaderFooterView {
    var editButton: UIButton!

    override init(reuseIdentifier: String?) {
        self.editButton = UIButton()
        self.editButton.setImage(UIImage(named: "Edit"), for: .normal)

        super.init(reuseIdentifier: reuseIdentifier)

        self.editButton.addTarget(self, action: #selector(editButtonPressed), for: .touchUpInside)

        self.contentView.addSubview(editButton)

        // Plaeholder for constraints
     }

     required init?(coder aDecoder: NSCoder) {
         fatalError()
     }

     @objc func editButtonPressed() {
         // Trigger transition to another view controller
     }
}

1 个答案:

答案 0 :(得分:0)

你可以做一些事情: 1)使用代表 2)从视图控制器添加目标到按钮 3)使用响应链

创建一个HeaderCellDelegate:

protocol HeaderCellDelegate: class {
    func didTapEdit()
}
class HeaderCell: UITableViewHeaderFooterView {
   weak var delegate: HeaderCellDelegate?
/* 
existing code 
*/
     @objc func editButtonPressed() {
         // Trigger transition to another view controller
          delegate?.didTapEdit()
     }
}

然后在你的viewcontroller中:

将HeaderCell委托设置为self。

headerCell.delegate = self 

extension viewcontroller: HeaderCellDelegate {
   func didTapEdit() {
        //present/push the new view controller
   }