自定义代理始终为零

问题描述:

我的代理在协议中使用时遇到问题,许多人面临同样的问题,但没有答案适用于我。自定义代理始终为零

我第一类是FavorisHeaderTableView

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设置为错误单元格的代表!

这里:

self.headerCell?.myDelegate = self 

您设置headerCell的委托self,但headerCell实际上从来不显示在屏幕上!

您需要在屏幕上实际设置单元的代表,而不是您创建的随机单元的代表。

做到这一点,最好的地方是cellForRowAtIndexPath

let cell = tableView.dequeueResusableCell(withIdentifier:...)! 
// configure your cell 
cell.delegate = self // set the delegate here! 
+0

非常感谢你!有用 –