2015-11-10 3 views
1

Я создаю приложение RSVP события, и экран RSVP предназначен следующим образом -СВИФТА: Создание Tableview с различными стилями прототипа

enter image description here

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

С помощью переполнения стека, я реализовал Tableview с несколькими ячейками прототипа с помощью следующей логики -

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

    if indexPath.row == 0 { 

     //cell 1 content 
     return cell 
    } else if indexPath.row == 1 { 
     //cell 2 content 
     return cell 
    } else if indexPath.row == 2 { 
     //cell 3 content 
     return cell 
    } ... 

Там проблема с выше логики при реализации того, что я хотел. Да, indexPath.row == 0 будет равно «Событие 1». Однако indexPath.row == 2, indexPath.row == 3, ..., indexPath.row == x будет заполнен количеством гостей, приглашенных к конкретному событию (ИЛИ заголовок будет подавлен, если есть гостей не приглашали на мероприятие). Вопрос в том, какую логику я использовал бы для отображения заголовка «Event 2» (т. Е. IndexPath.row == x + 1)?

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

+1

используйте несколько разделов! –

ответ

1

Вам необходимо создать массив (называемый разделом) словаря с идентификатором события, EventName и SubArray of Guests (имена гостей). Вы должны использовать функцию numberOfSectionsInTableView, чтобы установить счетчик заголовков.

override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     // Return the number of sections. 
    return self.sections.count 
} 

Установите количество клеток в определенной секции, как

override func tableView(tableView: UITableView, 
    numberOfRowsInSection section: Int) 
    -> Int { 
    return self.sections[section].guests.count 
} 

Вы можете создать TableViewCell для пользовательских HeaderView в раскадровке анс использовать его из

override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
    let headerCell = tableView.dequeueReusableCellWithIdentifier("HeaderCell") as! CustomHeaderCell 
    headerCell.backgroundColor = UIColor.cyanColor() 

     headerCell.headerLabel.text = self.sections[section].eventName 

    return headerCell 
    } 

Для подразделу клетки используют ,

override func tableView(tableView: UITableView, 
     cellForRowAtIndexPath indexPath: NSIndexPath) 
     -> UITableViewCell { 
     let guest = self.sections[indexPath.section].guests[indexPath.row] 

     let cell = tableView.dequeueReusableCellWithIdentifier("UITableViewCell", forIndexPath: indexPath) as UITableViewCell 
     cell.textLabel.text = guest.name 
     return cell 
    } 

Читайте об этом для дополнительной помощи https://www.ralfebert.de/tutorials/ios-swift-uitableviewcontroller/

+0

@Janeena Jose, Спасибо за вашу помощь. Я попробовал учебник, и он отлично работал. Я попытался воспроизвести решение в своем коде, основанном на вашем предложении выше. Я зациклился на том, как должен выглядеть словарь. Можете ли вы привести пример в своем решении выше? Благодарю. – SB2015

0

Сделайте словарь, используя в качестве ключей идентификаторы событий и как значения массивов гостей.

В вашем табличном представлении будут использоваться разделы.

Число разделов будет количеством событий (количество ключей вашего словаря).

Количество строк в каждом разделе будет размером с количество гостей.

celForRowAtIndex будет легко реализовать.

+0

Не могли бы вы привести пример словаря? Благодарю. – SB2015

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