根据段显示正确的文本颜色?

Display right text color according to segment?

我有一个包含 2 个段 ONCOFC 的分段控件,如果我在 ONC 下更改 row1 的颜色,它会更改 [=13] 的颜色=] 也在 OFC 中。如果 eventStatus = 1,我喜欢将事件的文本颜色更改为 green,如果 eventStatus = 2,则将文本颜色更改为 red。这是我到目前为止所做的

   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
    }

}

如何根据每个 segment 下的 eventStatus 显示正确的文本颜色?

使用 EventScheduleOfcEventScheduleONc 数组代替字符串数组,在 didSelectRowAt 中设置 EventDesceventStatus 后,只需重新加载 tableView。

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
}

现在在 didSelect 中只需设置核心数据中的值,然后不再设置标签的 textColor 只需重新加载 tableView.