Пользовательский UITableViewCell не соответствует протоколу UITableViewDataSource?

Я последовал за этот пост и поместил в свой собственный UITableViewCell SummaryCell UITableView detailTableView

Но теперь я получаю сообщение об ошибке:

Type 'SummaryCell` does not conform to protocol `UITableViewDataSource`

Если кто-нибудь может сказать, что я делаю неправильно и как это исправить, я был бы очень признателен!


Код для SummmaryCell:

class SummaryCell: UITableViewCell, UITableViewDelegate, UITableViewDataSource{

@IBOutlet weak var dayOfWeek: UILabel!
@IBOutlet weak var totalSpent: UILabel!
@IBOutlet weak var totalSpentView: UIView!

@IBOutlet weak var heightOfMainView: NSLayoutConstraint!

@IBOutlet weak var detailTableView: UITableView!

var data: [Expense] = [Expense]()

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

    detailTableView.delegate = self
    detailTableView.dataSource = self

    //create data array
    let calendar = NSCalendar.currentCalendar()
    let dateComponents = NSDateComponents()
    dateComponents.day = 14
    dateComponents.month = 5
    dateComponents.year = 2015
    dateComponents.hour = 19
    dateComponents.minute = 30
    let date = calendar.dateFromComponents(dateComponents)
    data = [Expense(amountSpent: 60), Expense(amountSpent: 20, date: date!), Expense(amountSpent: 40, date: date!, function: Function.Social, category: Category.Fun, subcategory: Subcategory.Events)]

}

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)
    // Configure the view for the selected state
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return data.count
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("detailCell") as! DetailTableViewCell

    return cell
}

}

Как выглядит мой summaryCell:

введите здесь описание изображения


person 14wml    schedule 09.01.2016    source источник
comment
Вы когда-нибудь слышали о MVC? ;-) developer.apple.com/library /ios/documentation/Общие/   -  person vadian    schedule 09.01.2016


Ответы (2)


Обычно считается плохой практикой приводить класс UITableViewCell в соответствие с протоколами UITableViewDataSource и UITableViewDelegate.

Я настоятельно рекомендую установить их оба на контроллер представления, содержащий табличное представление, и могу предположить, что это, вероятно, вызывает вашу ошибку.

person fredpi    schedule 09.01.2016
comment
Позвольте мне проверить, правильно ли я вас понял: вы говорите, что я должен сделать detailTableView вместо UITableView a UITableViewController? ... Я просто немного смущен тем, что вы подразумеваете под своим вторым предложением, и был бы признателен, если бы вы могли уточнить в контексте моего кода, что вы имеете в виду. - person 14wml; 09.01.2016
comment
Я не уверен, что вы знаете, что вы на самом деле пытаетесь сделать здесь. Чтобы создать tableView, вам обычно нужен ViewController, который содержит табличное представление и содержит функции делегата и источника данных. Кажется, вы немного путаете вещи. Вы должны четко различать UITableView, UITableViewCell и UIView. Я бы рекомендовал прочитать этот учебник, чтобы лучше понять UITableView: ralfebert.de/tutorials/ ios-swift-uitableviewcontroller - person fredpi; 09.01.2016

Чтобы выполнить возвратить ответ false, ячейка должна нести ответственность только за свои представления. У него не должно быть свойства для tableView. Как правило, это плохой дизайн для ячейки, которая должна знать или контролировать что-либо о представлении в своей иерархии суперпредставления.

Кроме того, если учесть маловероятную возможность того, что повторно используемая ячейка, которая оказалась делегатом, будет деинициализирована, у tableView больше не будет делегата.

person Community    schedule 09.01.2016