2017-02-22 4 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

Вы пытаетесь присвоить класс контроллера представления свойству delegate, а не экземпляру диспетчера представлений. Вы хотите:

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 для расширения. Представьте, что все viewController, которые имеют tableView, будут использовать одно и то же расширение. –

+0

По-прежнему не нужно использовать дженерики. Функция макета не волнует; все, что нужно знать, - это то, что соответствует протоколу – Paulw11

+0

привет Paul, он работает только потому, что вы используете один viewController, как этот func layoutTemplateCell (indexPath: IndexPath, viewController: CustomTableViewCellDelegate) -> UITableViewCell , но я хочу использовать с несколькими viewController, поэтому я должен сделать что-то вроде этого func layoutTemplateCell (indexPath: IndexPath, viewController: UIViewController) -> UITableViewCell и когда у меня есть такая же ошибка –

Смежные вопросы