congolese developper
congolese developper

Reputation: 57

Save uipickerview color in core data

I know what I want, but I'm just struggling to get it the right way. I'm trying to implement a small app, which let the user add a category by providing a category name, description and then select colour from the uipickerview. I've successfully saved the name, description in the core data. I'm just struggling in how to get the selected colour string and save it in the core data. Any help will be appreciated. This is what I've so far as code:

import UIKit
import CoreData

class NewCategory: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {

    let categoryColor = ["Red","Yellow","Black","White", "Green", "Blue"]

    // MARK: - Properties
    let context = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext

    // MARK: Outlets
    @IBOutlet weak var name: UITextField!
    @IBOutlet weak var descriptionField: UITextView!
    @IBOutlet weak var pickerView: UIPickerView!
    @IBOutlet weak var colorLabel: UILabel!


    // MARK: Actions
    @IBAction func saveBtn(sender: AnyObject) {

        if name.text == "" || name.text.isEmpty || name.text.isEmpty{
            var alert = UIAlertController(title: "WARNING !!!", message: "Couldn't add category. Fill all fields.", preferredStyle: UIAlertControllerStyle.Alert)
            alert.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.Default, handler: nil))
            self.presentViewController(alert, animated: true, completion: nil)
        } else {
            createCategory()        }

    }

    // MARK: View settings
    override func viewDidLoad() {
        super.viewDidLoad()
        self.pickerView.dataSource = self
        self.pickerView.delegate = self
    }

    // Custom functions
    func createCategory() {
        let entity = NSEntityDescription.entityForName("Category", inManagedObjectContext: context!)
        let category = Category(entity: entity!, insertIntoManagedObjectContext: context)

            category.name = name.text
            category.descript = descriptionField.text
            category.color = colorLabel
            println(category.name)
            context?.save(nil)
    }

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
        return 1
    }

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return categoryColor.count
    }

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
        return categoryColor[row]
    }

    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        if (row == 0) {
            colorLabel.backgroundColor = UIColor.redColor()
        }
        else if(row == 1) {
            colorLabel.backgroundColor = UIColor.yellowColor()
        }
        else if(row == 2) {
            colorLabel.backgroundColor = UIColor.blackColor()
        }
        else if(row == 3) {
            colorLabel.backgroundColor = UIColor.whiteColor()
        }
        else if(row == 4) {
            colorLabel.backgroundColor = UIColor.greenColor()
        }
        else {
            colorLabel.backgroundColor = UIColor.blueColor()
        }
    }
}

Upvotes: 0

Views: 322

Answers (2)

MirekE
MirekE

Reputation: 11555

You can get the color name this way:

let index = pickerView.selectedRowInComponent(0)
let color = categoryColor[index]

For example, you could use it in your function like this:

func createCategory() {
        let entity = NSEntityDescription.entityForName("Category", inManagedObjectContext: context!)
        let category = Category(entity: entity!, insertIntoManagedObjectContext: context)

            category.name = name.text
            category.descript = descriptionField.text

            let index = pickerView.selectedRowInComponent(0)
            let color = categoryColor[index]
            category.color = color // (assuming color is a String)
            println(category.name)
            context?.save(nil)
    }

Upvotes: 1

Venk
Venk

Reputation: 5955

In didSelectRow get the value from categoryColor

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
       let colorString = categoryColor[row] as! String

        // Save the colorString into Core data

    }

Upvotes: 0

Related Questions