使用 Swift 的代表

Posted

技术标签:

【中文标题】使用 Swift 的代表【英文标题】:Delegates with Swift 【发布时间】:2018-04-26 15:09:25 【问题描述】:

目前我有一个带有 TableView 的 ViewController 和一个包含后退按钮的自定义 Header。我想从头类中说ViewController必须回到之前的ViewController。我面临的问题是我符合协议并且接收到按钮的操作,但调试器没有进入解除功能。代码如下:

    protocol StoresFilterHeaderViewDelegate: class 
        func onBackButtonTap();
    
    class StoresFilterHeaderView: UICollectionReusableView 

        weak var delegate: StoresFilterHeaderViewDelegate?;
        @IBOutlet weak var lbSubcategory: UILabel!
        @IBOutlet weak var ivSubcategory: UIImageView!

        // MARK: Actions

          @IBAction func onBackToMomentDetailButtonTap(_ sender: AnyObject) 
                self.delegate?.onBackButtonTap();
                print("button pressed");
      
    

“按钮按下”打印得很好


class StoresFilterViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, StoresFilterHeaderViewDelegate 

    func onBackButtonTap() 
        print("segueback")
    

“segueback”没有被打印出来

【问题讨论】:

你设置了StoresFilterHeaderView的代理吗? (<instance of the custom view>.delegate = self) @the4kman 我设置:weak var delegate: StoresFilterHeaderViewDelegate?; 不是吗? 这只是声明委托本身,您没有设置它的值。 Check out this guide. Swift Delegate Not Being Called的可能重复 不相关,但这是 Swift:没有尾随分号! 【参考方案1】:

在创建 headerview 时,将其委托设置为 self。

headerView.delegate = self

你应该在StoresFilterViewController初始化headerView之后添加这个

【讨论】:

以上是关于使用 Swift 的代表的主要内容,如果未能解决你的问题,请参考以下文章

Swift 代表在 2 个地方设置单例

如何使用objective c实现苹果手表皇冠代表

“L”的 Swift 数据类型代表啥?

尝试从父级 IOS swift 3 中删除子级时,我的代表为零

swift code的5位数字代表啥

swift Swift - 代表和协议