2017-02-22 62 views
0

嗨,你好嗎?希望你們很好。使用泛型設置cellDelegate

我需要一點幫助,我提前感謝你。

我有一個自定義委託在我的自定義單元格,就像這樣:

protocol customTableViewCellDelegate: NSObjectProtocol { 
    func buttonPressed(customCell: customTableViewCell) 
} 

和我有一個擴展設置在表視圖中的單元格,就像這樣:

extension UITableView { 
    func layoutTemplateCell<T: UIViewController>(indexPath: IndexPath, viewController: T.Type) -> UITableViewCell { 
      let cell = UITableViewCell() 

       switch template { 
       case customCell: 
        let cell = self.dequeueReusableCell(withIdentifier: customTableViewCell.identifier) as! customTableViewCell 
        cell.delegate = viewController.self 
        return cell 
       default: 
        break 
       } 
      return cell 
     } 
} 

但我在cell.delegate中出現錯誤「無法將類型爲T.type的值指定爲customTableViewCellDelegate?」

我不知道如何正確使用泛型,我不知道如何解決這個錯誤。

我希望你們能幫助我。感謝您花時間閱讀本文,祝您有美好的一天。

回答

2

您試圖將視圖控制器的類分配給委託屬性,而不是視圖控制器實例。你想要的是:

cell.delegate = viewController 

我不明白你爲什麼使用泛型。你可以使用協議:

protocol CustomTableViewCellDelegate: NSObjectProtocol { 
    func buttonPressed(customCell: UITableViewCell) 
} 

extension UITableView { 
    func layoutTemplateCell(indexPath: IndexPath, viewController: CustomTableViewCellDelegate) -> UITableViewCell { 
      let cell = UITableViewCell() 

       switch template { 
       case customCell: 
        let cell = self.dequeueReusableCell(withIdentifier: customTableViewCell.identifier) as! CustomTableViewCell 
        cell.delegate = viewController 
        return cell 
       default: 
        break 
       } 
      return cell 
     } 
} 
+0

嗨,我使用泛型,因爲我想使用更多的一個viewController的擴展。想象一下,所有具有tableView的viewController都將使用相同的擴展名。 –

+0

仍然沒有必要使用泛型。佈局功能不關心;所有它需要知道的是,它有一些符合協議 – Paulw11

+0

嗨保羅,它只適用,因爲你使用一個這樣的viewController像這樣 func layoutTemplateCell(indexPath:IndexPath,viewController:CustomTableViewCellDelegate) - > UITableViewCell 但我想使用多個viewController,所以我必須做這樣的事情 func layoutTemplateCell(indexPath:IndexPath,viewController:UIViewController) - > UITableViewCell 當我做同樣的錯誤 –