2016-06-24 5 views
0

Я довольно новичок в мире Swift и iOS, и я создаю приложение списка дел. У меня есть подробный вид, который показывает имя списка и его задачи. Моя цель - показать задачи в двух отдельных разделах, одна для неполной задачи и другая для завершенных задач.UITableView numberOfRowsInSection - показывает полные/неполные задачи

В numberOfRowsInSection, если я использую:

return list.tasks.count 

я получаю это:

enter image description here

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

В task.task.count "task" есть класс, который имеет свойство "var isComplete: Bool = false", которое я надеялся использовать для разделения полных/неполных задач здесь. Заранее спасибо.

+0

Вы можете показать модель "список". как вы разработали. –

+0

Это то, к чему я его изменил. Как вы видите, теперь я использую отдельный массив для выполнения полных и неполных задач. класс 'Список: NSObject { имя вар = "" // вар задачи = [Task]() вар CompleteTask = [Task]() вар incompleteTask = [Task]() }' – SuperTony

ответ

1

Возможно, было бы лучше иметь разные массивы. Один для полных задач и один для неполных задач, тогда вы можете проверить раздел Table View, чтобы узнать, сколько строк нужно вернуть.

В numberOfRows:

if section == 0 { 
    return completedTasks.count 
} else { 
    return incompleteTasks.count 
} 

Это также позволит вам проверить в cellForRowAtIndexPath раздел и вам не придется возиться с запоминанием, где в массиве ваши полные/неполные задачи до:

if indexPath.section == 0 { 
    cell.task = completedTasks[indexPath.row] 
} else { 
    cell.task = incompleteTask[indexPath.row] 
} 

Update:

Для решения этой проблемы в комментариях:

if let destination = segue.destinationViewController as? TaskDetailViewController { 
    let selectedRow = tableViewTasks.indexPathForSelectedRow?.row { 
     // let incompleteTask = list.incompleteTask[selectedRow] 
     // let completeTask = list.completeTask[selectedRow] 
     // destination.task = list.tasks[selectedRow] 
    } 
} 

Вы должны проверять, если tableViewTasks.indexPathForSelectedRow существует, то нет, если строка существует так изменится:

let selectedRow = tableViewTasks.indexPathForSelectedRow?.row { 

в

if let selectedIndexPath = tableViewTasks.indexPathForSelectedRow { 

проверьте раздел, чтобы увидеть какой массив вы хотите и нажмите сюда, чтобы увидеть, где именно именно вы хотите:

if selectedIndexPath.section == 0 { 
    destination.task = list.completedTasks[selectedIndexPath.row] 
} else { 
    destination.task = list.incompleteTasks[selectedIndexPath.row] 
} 
+0

Спасибо @ Сэм. Где вы предлагаете мне создавать разные массивы? В классе List? Я сделал это, и он отлично работает для отображения данных, но теперь доступ к представлению от prepareForSegue - это то, где у меня проблема. – SuperTony

+1

Да, в классе списка отлично работает. Не могли бы вы подробнее рассказать о своей проблеме с помощью prepareForSegue или если это не связано, вы можете отправить еще один вопрос. – Sam

+0

Это то, что готовитForSegue выглядит так: 'if let destination = segue.destinationViewController as? TaskDetailViewController, пусть selectedRow = tableViewTasks.indexPathForSelectedRow? .row { // пусть incompleteTask = list.incompleteTask [selectedRow] // пусть CompleteTask = list.completeTask [selectedRow] // destination.task = list.tasks [selectedRow] } ' – SuperTony

0

В ваших данных ce метод tableView(_: numberOfRowsInSection:) вы должны вернуть другое значение в зависимости от индекса секции; например:

if section == 0 { 

    return activeTasks.count 
} 
else if section == 1 { 

    return completedTasks.count 
} 
else { 

    return 0 // Error - should never happen 
} 

(Предполагает вы держите завершенные задачи и не-завершенные задачи в двух отдельных массивов)

1

Я собираюсь сделать предположение о том, что у вас есть две таблицы, одна для завершенных задач и один для неполных задач. То, что вы должны делать это, вероятно, что-то похожее на это:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     if section == 0 { 
      return list.tasks.count 
     } else { 
      return lists.completedTasks.count 
     } 
    } 

Тогда в cellForRowAtIndexPath вы должны создать ячейки с соответствующей информацией.Вы можете получить раздел и строку из переменной indexPath в этой функции и использовать эту информацию для настройки ячейки по мере необходимости.

+0

Нет, у меня есть только одна таблица и несколько разделов. Я попытался изменить свойства в моем классе List из 'вар задач = [Task]()' к: '// вар задачи = [Задача]()' ' вар CompleteTask = [Task]()' 'var incompleteTask = [Task]()' , но это вызывает дополнительные проблемы при попытке получить доступ к этой задаче позже в моем подробном представлении задачи. – SuperTony

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