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

标签 swift xcode core-data uisegmentedcontrol

我有一个包含 2 个段的分段控件 ONCOFC , 如果我改变 row1 的颜色在 ONC 下, 它正在改变 row1 的颜色在 OFC以及。我喜欢将文本颜色更改为 green对于一个事件,如果eventStatus = 1 , 和 red如果eventStatus = 2 .这是我到目前为止所做的

   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
    }

}

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

最佳答案

不是使用字符串数组,而是使用 EventScheduleOfcEventScheduleONc 数组,并且在设置 EventDesceventStatus 之后didSelectRowAt 只需重新加载 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

关于swift - 根据段显示正确的文本颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42667725/

相关文章:

ios - 在 Swift 中将 CoreData 保存/同步到 iCloud

ios - 核心数据 : No existing entry for row 0 but for row 1, 2,3

ios - 使用 SwiftUI 创建手势来编辑列表项

ios - 将 Parse 导入 Xcode 项目

objective-c - 核心数据 : missing variable binding for (null)

ios - 无法将数据传递给嵌入在导航栏中的 View Controller

c - 读取C txt文件的问题

ios - 我的带有自动布局约束的 Swift 4 UIScrollView 不滚动

ios - ObjC 到 Swift 将 NSDictionary 转换为 NSObject : AnyObject

ios - 快速打开文件