2015-10-05 9 views
0

У меня есть табличное представление с двумя различными пользовательскими ячейками, как со своим уникальным идентификатором многократного использования. Мне нужно, чтобы каждый из них имел разную высоту. мой cellForRowAtIndexPath выглядит следующим образом:Разные высоты для двух разных многоразовых ячеек в табличном представлении

//3 
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject!) -> PFTableViewCell? { 

    let PostObject = object as! Post 

    if PostObject["fichierimage"] as? PFFile == nil { 

     let cell2 = tableView.dequeueReusableCellWithIdentifier("cell10", forIndexPath: indexPath) as! cell0Entry 

     return cell2 

    } 
    else { 

    let cell = tableView.dequeueReusableCellWithIdentifier("cell9", forIndexPath: indexPath) as! cell4 

     return cell 

    } 

} 

Это работает правильно загрузить все данные в Tableview. Но высота обеих ячеек остается на уровне 481, тогда как высота первого должна быть 99. Я установил ее высоту до 99 в раскадровке, но я думаю, что высота таблицы tableView перекрыла ее. Я попробовал это в heightForRowAtIndexPath, но это не сработало, он выдает ошибку и вылетает приложение:

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 

    let object1 = objectAtIndexPath(indexPath) 
    let object2 = object1 as! Post 


    // this next line throws the error 
    if object2["fichierimage"] as? PFFile == nil { 
     return 99 
    } 
    else { 
     return 481 
    } 
} 

сообщение об ошибке говорит:

Нагрузочного приложение из-за неперехваченное исключение «NSRangeException», причина: «*** - [__ NSArrayM objectAtIndex]: индекс 2 за пределами [0 .. 1]

+0

В инспекторе атрибутов попробуйте изменить содержание Tableview в «Статические клетки». Вы можете проектировать каждую ячейку отдельно. Также вы можете изменить высоту каждой ячейки, просто перетащив их в раскадровку. – Skywalker

+0

Я пробовал это, но я использую PFQueryTableViewController, а не UITableviewController, поэтому я получил сообщение об ошибке «статические ячейки могут быть встроены только в UITableViewController» – joey

ответ

0

изменить

// this next line throws the error 
if object2["fichierimage"] as? PFFile == nil { 
    return 99 
} 
else { 
    return 481 
} 

Для этого:

if let _ = object2["fichierimage"] as? PFFile { 
    return 99 
} 
else { 
    return 481 
} 

Скажите мне, если он работает

+0

, которые все еще не работают, я получил сообщение об ошибке: Завершение приложения из-за неотображения исключение 'NSRangeException', причина: "*** - [__ NSArrayM objectAtIndex]: индекс 2 за пределами [0 .. 1] – joey

+0

Так что эта линия: пусть object1 = objectAtIndexPath (indexPath) которые авария вашего приложения , Проверьте indexPath.row и ваш объектAtIndexPath.count. EDIT: я могу догадаться, что ваш объектAtIndexPath имеет 2 элемента (0..1) и ваш localIndexPath из точки таблицы данных datasource за пределами этого – jlngdt

+0

честно. Я новичок в программировании и не уверен точно, что вы подразумеваете под «тестированием», indexPath.row. Я добавил println (objectatindexPath (NsIndexPath)) в раздел heightforrowatindexpata, и он напечатал детали объекта на консоли, поэтому что-то есть, это не совсем так, насколько я могу судить. – joey

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