2017-04-17 100 views
-1

下面是我的界面的外观,如果我创建一个事件,它是黑色的,并且一旦我从动作控制器选择“是”或“否”,它会相应地变成绿色或红色。按组排序数据

如果我选择行的一个事件,并选择yes,原来​​,我喜欢Yes section下对它进行排序,如果no它变成red,我喜欢No section下排序。但我无法做到这一点,因为我创建的所有事件都被分组在Events section之下。我喜欢了解如何在他们所属的部分下发送活动。

例如,我喜欢按组我的事件进行排序,我喜欢看YesMath101English101NoGeo 101 , Stats 101下留Events下。我尝试了很多在我的代码下面来填充在不同的地方OncYesOncNo白天徒劳。

enter image description here

var eventTitleOnc:[String] = [] 
    var oncYes:[String] = [] 
    var oncNo:[String] = [] 
    var oncEventsPresent: [String] = [] 
    var eventType:[Int] = [] 
    var oncEvents : [String] = [] 
var eventScheduleOnc = [EventScheduleOnc]() 
let sectionTitles:[String] = ["Events","Yes","No"] 

    override func viewDidLoad() { 
    super.viewDidLoad() 
     eventDataOnc() 
     for i in stride(from: 0, to: eventTitleOnc.count, by: 1){ 
       oncEventsPresent.append(eventTitleOnc[i]) 
      } 
     myEventTableView.reloadData() 
    } 

// Number of Rows in Section 

public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    { 
     var typeOfEvent = 0 

     if(section == 0) 
     { 
     typeOfEvent = oncEventsPresent.count 
     } 
     if(section == 1) 
     { 
      typeOfEvent = oncYes.count 
     } 
     if(section == 2) 
     { 
      typeOfEvent = oncNo.count 
     } 
    return typeOfEvent 
} 

// Cell for Row 
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{ 
     let myEventCell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) as! EventTableViewCell 
     myEventCell.eventLabel.text = self.eventScheduleOnc[indexPath.row].eventNameOnc 
     let eventDesc = self.eventScheduleOnc[indexPath.row].eventDecOnc 
     let eventStatus = eventDesc?.eventStatus 
      if eventStatus == 1 { 
       myEventCell.eventLabel.textColor = UIColor.green 
      } 
      else if eventStatus == 2{ 
       myEventCell.eventLabel.textColor = UIColor.red 
      } 
     else 
      { 
      myEventCell.eventLabel.textColor = UIColor.black 
      } 
      } 
      return myEventCell 
    } 


//Did Select Row at index path 

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){ 
    let eventDesc = NSEntityDescription.insertNewObject(forEntityName: "EventDec", into: context) as! EventDec 
    var eventSchOnc :EventScheduleOnc? 
    do { 
      let fetchRequestOnc:NSFetchRequest<EventScheduleOnc> = EventScheduleOnc.fetchRequest() 
      fetchRequestOnc.returnsObjectsAsFaults = false 
      fetchRequestOnc.predicate = NSPredicate(format: "eventNameOnc == %@",self.oncEventsPresent[indexPath.row] as String) 
      var eventSchOncObjects = [EventScheduleOnc]() 
      try eventSchOncObjects = context.fetch(fetchRequestOnc) 
      eventSchOnc = eventSchOncObjects[0] as EventScheduleOnc 
      } 
catch {} 
    eventDesc.setValue(eventSchOnc, forKey: "eventScheduleOnc") 
    let alert = UIAlertController(title: "title", message: "msg", preferredStyle: .alert) 
    DispatchQueue.main.async { 
    alert.addAction(UIAlertAction(title: "yes", style: .default){ _ in 
     eventDesc.setValue(1, forKey: "eventStatus") 
     do { 
      try context.save() 
      self.myEventTableView.reloadData() 
      } 
     catch{} 
    }) 
    alert.addAction(UIAlertAction(title: "no", style: .default) { _ in 
     eventDesc.setValue(2, forKey: "eventStatus") 

     do{ 
      try context.save() 
      self.myEventTableView.reloadData() 
      } 
     catch {} 
    }) 
    } 
present(alert, animated: true, completion: nil) 
} 

//MARK: - Core data 

private func eventDataOnc(){ 
    let eventsOncFetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName:"EventScheduleOnc") 
    let primarySortDescriptor = NSSortDescriptor(key:"eventDecOnc.eventStatus", ascending: false) 
    let secondarySortDescriptor = NSSortDescriptor(key:"eventNameOnc", ascending: true) 
    eventsOncFetchRequest.sortDescriptors = [primarySortDescriptor,secondarySortDescriptor] 
do 
    { 
     let results = try context.fetch(eventsOncFetchRequest) 
     if results.count > 0 
     { 
      for result in results 
      { 
       if let eventDisTextOnc = (result as AnyObject).value(forKey: "eventNameOnc") as? String 
       { 
         eventTitleOnc.append(eventDisTextOnc) 
       } 
      } 
     } 
      self.eventScheduleOnc = try context.fetch(eventsOncFetchRequest) as! [EventScheduleOnc] 
    } 
    catch{print(error.localizedDescription)} 
} 

如何排序组这个数据?

+0

我无法理解你的问题,我不打算通过你的鳕鱼来试图弄清楚你在说什么。 –

+0

@DuncanC,请让我知道,如果这是明确的 – Coder221

+0

没有。什么是事件?显示定义。你的活动如何组织?解释你的数据结构的布局以及一切意味着什么。 –

回答

0

我会用的tableview与3个部分:

enum Section { 
    case undecided, yes, no 
    static let all: [Section] = [.undecided, .yes, .no] 
} 

那么我将我的数据粘成阵列的字典(或可替换地与相关联的值枚举的阵列):

var events[Section: [String]] = [.undecided: [], .yes: [], .no: []] 

你的数据源方法看起来像这样:

extension V: UITableViewDataSource { 
     func numberOfSections(in tableView: UITableView) -> Int { 
      return Sections.all.count 
     } 
     func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
      return events[Sections.all[section]]!.count 
     } 
     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
      let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: MyCell.self), for: indexPath) as MyCell 
      cell.event = events[Sections.all[section]]! 
      return cell 
     } 
    }