2017-03-08 3 views
0

Ich habe eine segmentierte Steuerung mit 2 Segmenten ONC und OFC, wenn ich Farbe row1 unter ONC ändern, ist es in Farbe von row1OFC auch ändert. Ich möchte die Textfarbe zu green für ein Ereignis ändern, wenn eventStatus = 1 und red wenn die eventStatus = 2. Dies ist, was ich habeAnzeige der richtigen Textfarbe nach Segment?

bisher getan
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){ 

    let eventDesc = NSEntityDescription.insertNewObject(forEntityName: "EventDec", into: context) as! EventDec 
    var eventSchOnc: EventScheduleOnc? 
    var eventSchOfc: EventScheduleOfc? 
    do { 
     switch (eventSegCtrl.selectedSegmentIndex) 
     { 
     case 0: 
      let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "EventScheduleOnc") 
      fetchRequest.fetchLimit = 1 
      fetchRequest.predicate = NSPredicate(format: "eventNameOnc == %@", self.oncEvents[indexPath.row] as String) 
      var objects: [EventScheduleOnc] 
      try objects = context.fetch(fetchRequest) as! [EventScheduleOnc] 
      eventSchOnc = objects[0] as EventScheduleOnc 
      break 

     case 1: 
      let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "EventScheduleOfc") 
      fetchRequest.fetchLimit = 1 
      fetchRequest.predicate = NSPredicate(format: "eventNameOfc == %@", self.ofcEvents[indexPath.row] as String) 
      var objects: [EventScheduleOfc] 
      try objects = context.fetch(fetchRequest) as! [EventScheduleOfc] 
      eventSchOfc = objects[0] as EventScheduleOfc 
      break 
     default:break 
     } 
    } 

catch { 
     print("Try Again") 
     } 

    eventDesc.setValue(eventSchOnc, forKey: "eventScheduleOnc") 
    eventDesc.setValue(eventSchOfc, forKey: "eventScheduleOfc") 

    let alert = UIAlertController(title: "title", message: "msg", preferredStyle: .alert) 

    alert.addAction(UIAlertAction(title: "yes", style: .default) { _ in 
     eventDesc.setValue(1, forKey: "eventStatus") 
     do { 
      try context.save() 
     } catch{ 
      print("Try again") 
     } 
    }) 
    alert.addAction(UIAlertAction(title: "no", style: .default) { _ in 
     eventDesc.setValue(2, forKey: "eventStatus") 
     do { 
      try context.save() 
     } catch { 
      print("Try again") 
     } 
    }) 
    present(alert, animated: true, completion: nil) 

    let myEventCell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) as! EventTableViewCell 
    let eventDescOnc = self.eventScheduleOnc[indexPath.row].eventDecOnc 
    let eventOnc = eventDescOnc?.eventStatus 
    if (eventOnc == 1) { 
     myEventCell.eventLabel.textColor = UIColor.green 
    } 
    else if (eventOnc == 2){ 
     myEventCell.eventLabel.textColor = UIColor.red 
    } 

    let eventDescOfc = self.eventScheduleOfc[indexPath.row].eventDecOfc 
    let eventOfc = eventDescOfc?.eventStatus 
    if (eventOfc == 1) { 
     myEventCell.eventLabel.textColor = UIColor.green 
    } 
    else if (eventOfc == 2) { 
     myEventCell.eventLabel.textColor = UIColor.red 
    } 

} 

Wie zeige ich rechts Textfarben nach eventStatus unter jedem segment?

+0

Was passiert, wenn Sie den Wert 'eventStatus' nicht mit 'EventScheduleOnc' oder' EventScheduleOfc' festgelegt haben? Bedeutet zum ersten Mal, welche Farbe du dafür zeigen wirst? –

+0

Nur schwarze Textfarbe – Coder221

Antwort

1

Anstelle der Verwendung von String-Array verwendet Array von EventScheduleOfc und EventScheduleONc und nach eventStatus von EventDesc in didSelectRowAt setzen einfach die Tableview laden.

private func eventDataOnc(){ 
    let appDelegate = UIApplication.shared.delegate as! AppDelegate 
    let context = appDelegate.persistentContainer.viewContext 
    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "EventScheduleOnc") 
    request.returnsObjectsAsFaults = false 
    do 
    {    
     self.eventScheduleOnc = try context.fetch(request) as! [EventScheduleOnc] 
    } 
    catch{} 
} 

private func eventDataOfc(){ 
    let appDelegate = UIApplication.shared.delegate as! AppDelegate 
    let context = appDelegate.persistentContainer.viewContext 
    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "EventScheduleOfc") 
    request.returnsObjectsAsFaults = false 
    do 
    { 
     self.eventScheduleOfc = try context.fetch(request) as! [EventScheduleOfc] 
    } 
    catch{} 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{ 
    let myEventCell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) as! EventTableViewCell 

    if eventSegCtrl.selectedSegmentIndex == 0 { 
     myEventCell.eventLabel.text = self.eventScheduleOnc[indexPath.row].eventNameOnc 

     if let eventDesc = self.eventScheduleOnc[indexPath.row].eventDec,   
      let eventStatus = eventDesc.eventStatus { 
      if eventStatus == 1 { 
       myEventCell.eventLabel.textColor = UIColor.green 
      } 
      else { 
       myEventCell.eventLabel.textColor = UIColor.red 
      } 
     } 
     else { 
      myEventCell.eventLabel.textColor = UIColor.black 
     } 
    } 
    else { 
     myEventCell.eventLabel.text = self.eventScheduleOfc[indexPath.row].eventNameOfc 
     if let eventDesc = self.eventScheduleOfc[indexPath.row].eventDec,   
      let eventStatus = eventDesc.eventStatus { 
      if eventStatus == 1 { 
       myEventCell.eventLabel.textColor = UIColor.green 
      } 
      else { 
       myEventCell.eventLabel.textColor = UIColor.red 
      } 
     } 
     else { 
      myEventCell.eventLabel.textColor = UIColor.black 
     } 
    } 
    return myEventCell 
} 

Jetzt in didSelect einfach den Wert in dem Kerndatensatz und dann anstelle textColor von Label Einstellung einfach die tableView neu zu laden.

+0

Funktioniert perfekt :) – Coder221

+1

@ Coder221 Willkommen Kumpel :) –