2017-10-16 39 views
0

我的代理在協議中使用時遇到問題,許多人面臨同樣的問題,但沒有答案適用於我。自定義代理始終爲零

我第一類是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」始終是零,我不明白什麼是錯的第二類儘管所有主題都閱讀了這個問題。

回答

1

您正在將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

非常感謝你!有用 –