2016-07-29 2 views
1

Я работаю в swift 2.x и xcode 7.x, и я застрял с tabelviews и данными api. Everywere я смотрю, что мне нужно иметь 2 массива с моим объектом и один для раздела. мой текущий код:Разделы в UITabelView с данными API

//MARK: Setting up the tableview 
    func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return eventsCollection.count 
    } 
    func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
     let eventDate = self.eventsCollection[section].startDate 
     let month = Utility.sharedInstance.convertToDateStringMonth(eventDate) 
     return month 
    } 

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


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

    return 70; 
} 


func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    return 
} 


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell: EventCellView! 
    cell = self.calenderTabelView.dequeueReusableCellWithIdentifier("EventCellView") as! EventCellView 
    cell.dayNameLabel.text = Utility.sharedInstance.getDayOfWeek(self.eventsCollection[indexPath.row].startDate) 
    cell.dayNumberLabel.text = Utility.sharedInstance.convertToDataDay(self.eventsCollection[indexPath.row].startDate) 
    cell.NewLabel.text = self.eventsCollection[indexPath.row].Name 
    return cell 
} 

Когда я получу данные, я разворачиваю его и устанавливаю его в eventcollection. exaple от события:

ПРИМЕЧАНИЕ: это ответ API.

AllDay = 1; 

Attendees =  (
); <as array> 
Description = "Test Evenment"; <as string> 
EndDate = "2017-02-03T23:59:59+00:00"; <as string> 
ID = 173; <as int or string> 
Name = "Test evenement"; <string> 
StartDate = "2016-11-01T00:00:00+00:00"; <string> 
VenueName = "Appbakkers HQ";} <string> 

Когда я запускаю код, он выделяет tabelview в разделах с названием месяца как заголовок заголовка. Но мне нужно отсортировать событие в нужном месяце. например, один в июне должен появиться только один раз в июне, и когда я добавлю другого в июне, ему нужно туда идти.

так TableView выглядеть следующим образом:

июня

ячейка для января

клеток за июнь

января

клеток за январь

клеток за июнь

то, что я хочу

июня:

ячейка для июня

января

ячейки для января

the function getDayOfWeek -> monday thueseday ,etc as a string 
the function convertToDataDay -> 1 - 31 as a string 
the function convertToDateStringMonth -> june, juli, etc. as string 

любого входного бы помочь мне вместе! Спасибо за любые ответы.

ДОПОЛНИТЕЛЬНО:

class Event: NSObject { 
    //the event class 
    var id:Int = 0 
    var Description: String = "" 
    var endDate: String = "" 
    var Name: String = "" 
    var startDate: String = "" 
    var venueName: String = "" 
// var Attendees: NSDictionary = [:] havent figuerd this part out also 
} 

    func mapComment(responseObject: AnyObject) -> Event{ 

     let EventObject = Event() 

//  let andenteesObject = responseObject["Attendees"] 

     if let ID = responseObject["id"] as? Int { 
      EventObject.id = ID 
     } else if let ID = responseObject["id"] as? String { 
      EventObject.id = Int(ID)! 
     } 

     if let despription = responseObject["Description"] as? String{ 
      EventObject.Description = despription 
     } 
     if let startDate = responseObject["StartDate"] as? String{ 
      EventObject.startDate = startDate 
     } 
     if let endDate = responseObject["EndDate"] as? String{ 
      EventObject.endDate = endDate 
     } 
     if let name = responseObject["Name"] as? String{ 
      EventObject.Name = name 
     } 
//  if let attendees = andenteesObject as? NSDictionary{ 
//   EventObject.Attendees = attendees 
//  } 
     return EventObject 
    } 
} 

так у меня есть 2 вопроса, собственно:

  1. Как я сортировать мои данные в месяц и массив
  2. Как я получаю мои данные из этого массива в TableView?
+0

Можете ли вы показать ответ json, который вы получаете, Это будет более полезно. –

+0

Я сделал свои части даже из примера. добавила заметку, чтобы сделать ее более ясной. – Cees

+0

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

ответ

1

Ваш подход хорош, необходима небольшая модификация. В общем, вы должны поддерживать участник по месяцам и отдельные даты массива, вот как это можно сделать,

var eventsByMonth : [String : [Event]] = [:] 

// store as date, its easy to sort (but anyway you like) 
var months = [NSDate]() 

// iterate over response and store according to month, 
for event in events { 

    //convert the string to date (you can find it easily) 
    let startDate = convertStringtoDate(event.startDate) 

    months.append(startDate) 

    // now split events by months 
    let month = Utility.sharedInstance.convertToDateStringMonth(event.StartDate) 

    var temp = eventsByMonth[month] ?? [] 
    temp.append(event) 

    eventsByMonth[month] = temp 
} 

months = sortDate(months) // sort anyway you like 

так что теперь вы можете использовать месяцы массив, чтобы получить отсчеты к Tableview, как показано ниже,

func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return months.count 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    let month = months[section] 

    guard let monthEvents = eventsByMonth[month] else { 
     return 0 
    } 

    return monthEvents.count 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let month = months[section] 
    let monthEvents = events[month]! 

    let event = monthEvents[indexPath.row] 

    // configure your cell 
} 

надеюсь, что это поможет!

+0

atendee - массив в том случае, если структура похожа на это событие [atendees [] другие значения;] поэтому я не уверен, как код выше работает – Cees

+0

by atendee, i означает единую сущность в этом массиве, поэтому все имена работают –

+0

i just попытался объяснить логику, ищите это, поэтому в вашей точке вы можете перебирать массив и хранить отдельный объект в соответствии с его startDate и хранить startDate в отдельном массиве, чтобы легко сортировать –

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