Swift3 自定义委托始终为零

Swift3 自定义委托始终为零,swift3,Swift3,我在协议中使用代理时遇到问题,许多人都面临同样的问题,但没有一个答案适合我 我的第一堂课是FavoriseAderTableView import UIKit protocol FavorisHeaderDelegate { func changeFavoris(sender: FavorisHeaderTableViewCell) } class FavorisHeaderTableViewCell: UITableViewCell { @IBOutlet weak var lblTit

我在协议中使用代理时遇到问题,许多人都面临同样的问题,但没有一个答案适合我

我的第一堂课是FavoriseAderTableView

import UIKit

protocol FavorisHeaderDelegate {
func changeFavoris(sender: FavorisHeaderTableViewCell)
}

class FavorisHeaderTableViewCell: UITableViewCell {

@IBOutlet weak var lblTitle: UILabel!
@IBOutlet weak var txtFavoriteNameInput: UITextField!
@IBOutlet weak var lblIcon: UILabel!
@IBOutlet weak var lblTime: UILabel!
@IBOutlet weak var lblDescription: UILabel!

@IBOutlet weak var btnFavHeart: UIButton!
@IBOutlet weak var btnFavHome: UIButton!
@IBOutlet weak var btnFavShop: UIButton!
@IBOutlet weak var btnFavWork: UIButton!
@IBOutlet weak var btnFavGolf: UIButton!


var myDelegate: FavorisHeaderDelegate? = nil


var defaultIcon:FavIconType = .heart

var selectedIcon:UIButton? = nil {
    didSet {
        selectedIcon!.backgroundColor = Design.Palette.red
        selectedIcon?.layer.cornerRadius = 3
        selectedIcon?.tintColor = Design.Palette.white
    }
    willSet {
        if selectedIcon != nil {
            selectedIcon!.backgroundColor = UIColor.clear
            selectedIcon?.tintColor = UIColor(red:0.671, green:0.651, blue:0.635, alpha:1)
        }
    }
}

@IBAction func didSelectIcon(_ sender: UIButton) {

    selectedIcon = sender
    self.myDelegate?.changeFavoris(sender: self)

}

@IBAction func changeTitle(_ sender: Any) {

    txtFavoriteNameInput.text = "gare centro"

    print("delegate: ",myDelegate)
    if myDelegate != nil {
        myDelegate?.changeFavoris(sender: self)
    }
}


override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}
}
使用该协议的第二类是

addFavoriteViewController: UIViewController {

// MARK properties
let defaultLocalizer = AMPLocalizeUtils.defaultLocalizer
var favorisName:String? = nil
var defaultIcon:FavIconType = .heart

var delegate:handleFavorite? = nil

@IBOutlet weak var favTableView: UITableView!

var headerCell:FavorisHeaderTableViewCell?

override func viewDidLoad() {
    super.viewDidLoad()


    // Localization of labels
    //lblAddToFavorite.text = defaultLocalizer.stringForKey(key: "str_favorites_addTitle")
    //lblFavoriteName.text = defaultLocalizer.stringForKey(key: "str_favorites_nameInput")

    favTableView.delegate = self
    favTableView.dataSource = self


    self.headerCell?.myDelegate = self
}

override func viewWillAppear(_ animated: Bool) {
    // Text Field
    //favorisName.clearButtonMode = .whileEditing

}

var place:PlaceModel? = nil
var itinerary:(source:PlaceModel, destination:PlaceModel)? = nil
let db = DataController.shared
var favorite:FavoritesMO? = nil

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}

extension UGOaddFavoriteViewController: FavorisHeaderDelegate {
func changeFavoris(sender: FavorisHeaderTableViewCell) {

    defaultIcon = sender.defaultIcon
    favorisName = sender.txtFavoriteNameInput.text
}
}
当我尝试此代码时,myDelegate始终为零,尽管阅读了所有关于此问题的主题,但我不明白出了什么问题。

您将self设置为错误单元格的代理

在这里:

您将headerCell的委托设置为self,但headerCell从未实际显示在屏幕上

您需要在屏幕上实际设置单元格的委托,而不是您创建的随机单元格的委托

执行此操作的最佳位置是CellForRowatineXpath:

self.headerCell?.myDelegate = self
let cell = tableView.dequeueResusableCell(withIdentifier:...)!
 // configure your cell
cell.delegate = self // set the delegate here!