swift - 以编程方式向 UITableViewFooterHeaderView 添加按钮以转换到另一个 View Controller

标签 swift

Screenshot of Wikipedia iOS App

我正在尝试向标题添加一个按钮,该按钮会触发到另一个 View Controller 的转换,就像上面维基百科 iOS 应用程序屏幕截图的链接一样。我想我被绊倒了,因为我不能(至少我不认为我可以?)“呈现”、“显示”或“推送”另一个 View Controller ,因为我的类是 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)使用委托(delegate) 2)从 View Controller 将目标添加到按钮 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()
     }
}

然后在你的 View Controller 中:

将 HeaderCell 委托(delegate)设置为 self。

headerCell.delegate = self 

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

关于swift - 以编程方式向 UITableViewFooterHeaderView 添加按钮以转换到另一个 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48775947/

相关文章:

ios - UILabel 需要很长时间才能快速加载

swift - 为什么在 UIView 再次添加到父级之前不调用 deinit?

swift - 无法使用我创建的 Cocoapod 代码

swift - 当@State 变量以高频率刷新 View 时,导航栏/工具栏按钮工作不可靠

swift - 从类型 '(NSData!, NSError!) throws -> ()' 的抛出函数到非抛出函数类型 '(NSData!, NSError!) -> Void' 的转换无效

ios - 将一组位置从 tableview 传递到 mapview

authentication - 使用 Swift 进行游戏中心身份验证

iOS 应用程序在加载 GoogleTagManager 容器时崩溃

ios - Swift - 如何使 UIButton 仅在附加图像上点击交互并忽略透明部分

swift - 如何使用苹果的网络框架向所有链接本地节点发送UDP消息?