2015-04-19 5 views
0

Итак, это API. У меня есть два поля с идентификаторами проектов ([projects][id] - ids) и идентификаторы родителей ([projects][parent][id] - projectsParentIDs). Я сравниваю эти два поля в методе cellForRowAtIndexPath, как показано ниже. Пока все хорошо (я думаю). Если projectsParentID с индексом 1 совпадает с id с индексом 0, отступ cell. Но этот код вставляет все ячейки. Не только один. Что я делаю не так?Отступ только для одной ячейки

for index in 0...self.projectsParentIDs.count-1 { 
    if(ids[index] == projectsParentIDs[index]+1){ 
    cell.indentationLevel = 1 
    cell.indentationWidth = 30 
    } 
} 


"projects":[ 
    { 
     "id":22, 
     "name":"MND", 
     "created_on":"2015-04-17T15:41:10+02:00", 
     "updated_on":"2015-04-17T15:41:10+02:00" 
    }, 
    { 
     "id":23, 
     "name":"MND child", 
     "parent":{ 
      "id":22, 
      "name":"MND" 
    } 
], 
"created_on":"2015-04-18T11:28:12+02:00", 
"updated_on":"2015-04-18T11:28:12+02:00" 


func tableView(tableView: UITableView, indentationLevelForRowAtIndexPath indexPath: NSIndexPath) -> Int { 

    var indent: Int = 1 

    if(indexPath.section == 1){ 
     for index in 0...self.projectsParentIDs.count-1 { 
      if(ids[index] == projectsParentIDs[index]+1){ 
       indent = 1 
       return indent 
      }else{ 
       indent = 0 
       return indent 
      } 
     } 
    } 
    return indent 
} 

Projects screenshot Edited screenshot

+0

Упорядочение кажется странным здесь- я бы ожидать, корневые проекты прийти первым - с этими данными первый проект будет дочерним и, таким образом, отступом, а второй - нет. Вот мое предположение о том, что может произойти. Все первые строки, которые будут показаны на экране, являются дочерними. Это единственные ячейки таблицы, которые будут выделены. Когда табличное представление приходит к первому родительскому объекту, оно повторно использует ячейку, но ваш код не сбрасывает отступ до 0, если элемент является родителем, поэтому все они имеют отступ. Сбросьте отступ в 'prepareForReuse' на подклассе tv или добавьте' if' в 'cellForRow:' –

ответ

1

Пожалуйста, используйте следующий UITableView «s delegate метод:

optional func tableView(_ tableView: UITableView, indentationLevelForRowAtIndexPath indexPath: NSIndexPath) -> Int 
+0

Я знаю об этом методе, но как его использовать? См. Мой отредактированный вопрос. Он все еще не работает. Он indent indexPath.section = 0, даже если я написал indexPath.section = 1. И он все еще отступы всех ячеек. – Kotora

+0

Используете ли вы один из предопределенных 'UITableViewCellStyle' или он является обычным? Если пользовательский вариант, пожалуйста, проверьте, например, [этот ответ] (http://stackoverflow.com/a/3878266/1565335) (в этом случае вы должны обрабатывать отступы вручную) – Azat

+0

Пожалуйста, просмотрите мой отредактированный вопрос. Я добавил скриншот страницы проектов. – Kotora