DEV'S

CoreData - UIDatePicker - Part2 - Final

StudentListViewController.swift

//
//  StudentListViewController.swift
//  StudentsApp
//
//  Created by Vasudev Kumaran on 19/12/17.
//  Copyright © 2017 NSE. All rights reserved.
//

import UIKit
import CoreData

class StudentListViewController: UITableViewController {
    private var students:[Student] = [];
    override func viewDidLoad() {
        super.viewDidLoad()
        loadStudentData();
        // Uncomment the following line to preserve selection between presentations
        // self.clearsSelectionOnViewWillAppear = false

        // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
        // self.navigationItem.rightBarButtonItem = self.editButtonItem
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    // MARK: - Table view data source

    override func numberOfSections(in tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return students.count;
    }
    
    func getManagedObjectContext() -> NSManagedObjectContext {
        let app:AppDelegate = UIApplication.shared.delegate as! AppDelegate;
        return app.persistentContainer.viewContext;
    }
    
    func loadStudentData() -> Void {
        let mObjCtx = getManagedObjectContext();
        let fr:NSFetchRequest<Student> = NSFetchRequest(entityName: "Student"); // Select * from Student
        /*
        let pr:NSPredicate = NSPredicate(format: "studentName = %@ and studentSubject = %@", "Vasudev","Chemistry"); // Select * from Student where studentName = ‘Vasudev’ and studentSubject = ‘Chemistry’
 
        fr.predicate = pr;
        */
        do{
            students = try mObjCtx.fetch(fr);
        }catch let error as NSError{
            print(error.userInfo);
        }
        
        self.tableView.reloadData();
        
    }

    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath)
        let nameLbl:UILabel = cell.viewWithTag(10) as! UILabel;
        
        nameLbl.text = students[indexPath.row].studentName;
        // Configure the cell…

        return cell
    }
    

    
    // Override to support conditional editing of the table view.
    override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
        // Return false if you do not want the specified item to be editable.
        return true
    }
    

    
    // Override to support editing the table view.
    override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
        if editingStyle == .delete {
            // Delete the row from the data source
            let mObj = getManagedObjectContext();
            let student:Student = students[indexPath.row];
            mObj.delete(student);
            try! mObj.save();
            loadStudentData();
        }
    }
    

    /*
    // Override to support rearranging the table view.
    override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) {

    }
    */

    /*
    // Override to support conditional rearranging of the table view.
    override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
        // Return false if you do not want the item to be re-orderable.
        return true
    }
    */

    
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.
        if (segue.identifier == "editSegue"){
            let addEditCtrl:AddEditViewController = segue.destination as! AddEditViewController;
            addEditCtrl.student = students[(self.tableView.indexPathForSelectedRow?.row)!];
        }
    }
    
    @IBAction func getCallBack(segue:UIStoryboardSegue) ->Void{
        loadStudentData();
    }

}

AddEditViewController.swift

//
//  AddEditViewController.swift
//  StudentsApp
//
//  Created by Vasudev Kumaran on 19/12/17.
//  Copyright © 2017 NSE. All rights reserved.
//

import UIKit
import CoreData

class AddEditViewController: UITableViewController,UITextFieldDelegate {

    @IBOutlet weak var dobField: UITextField!
    @IBOutlet weak var subjectField: UITextField!
    @IBOutlet weak var nameField: UITextField!
    public var student:Student?;
    private var datePicker:UIDatePicker?
    override func viewDidLoad() {
        super.viewDidLoad()
        dobField.delegate = self;
        datePicker = UIDatePicker();
        if (student == nil){
            datePicker?.date = Date();
        }else{
            nameField.text = student?.studentName;
            subjectField.text = student?.studentSubject;
            datePicker?.date = (student?.studentDob)!;
        }
        okBtnPressed();
        
    }

    @IBAction func savePressed(_ sender: Any) {
        let mObjCtx:NSManagedObjectContext = getManagedObjectContext();
        if (student == nil){
            //add
            student = NSEntityDescription.insertNewObject(forEntityName: "Student", into: mObjCtx) as? Student;
        }else{
            //Edit
        }
        
        student?.studentName = nameField.text;
        student?.studentSubject = subjectField.text;
        student?.studentDob = datePicker?.date;
        do{
            try mObjCtx.save();
            performSegue(withIdentifier: "goBackSegue", sender: nil);
        }catch let error as NSError{
            print(error.userInfo);
        }
        
        
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    func getManagedObjectContext() -> NSManagedObjectContext {
        let app:AppDelegate = UIApplication.shared.delegate as! AppDelegate;
        return app.persistentContainer.viewContext;
    }
    
    func textFieldDidBeginEditing(_ textField: UITextField) {
        print("dob field called");
        datePicker?.datePickerMode = .date;
        textField.inputView = datePicker;
        
        let toolBar:UIToolbar = UIToolbar();
        let okBtn:UIBarButtonItem = UIBarButtonItem(title: "OK", style: UIBarButtonItemStyle.done, target: self, action: #selector(okBtnPressed));
        let dummyBtn:UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: self, action: nil);
        let cancelBtn:UIBarButtonItem = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.plain, target: self, action: #selector(cancelBtnPressed));
        toolBar.setItems([okBtn,dummyBtn,cancelBtn], animated: true);
        toolBar.sizeToFit();
        textField.inputAccessoryView = toolBar;
    }
    
    @objc func okBtnPressed() -> Void {
        dobField.endEditing(true);
        print(datePicker?.date ?? "No Date");
        let dateFormat:DateFormatter = DateFormatter();
        dateFormat.dateStyle = .full;
        dobField.text = dateFormat.string(from: (datePicker?.date)!);
    }
    
    @objc func cancelBtnPressed() -> Void {
        dobField.endEditing(true);
        //print(datePicker?.date ?? "No Date");
    }

    

}

iOS

2017-12-19 00:07:26
1) CoreData - UIDatePicker - Part2 - Final
2017-12-18 23:29:30
2) CoreData - UIDatePicker - Part1
2017-12-18 05:09:33
3) Shopping List App - Swift Part 2 - ActionSheet
2017-12-18 03:22:51
4) Shopping List App - Swift Part 1
2017-12-17 23:34:49
5) Swift - Introduction - WebService
2017-12-15 03:30:23
6) Shopping List IOS App - Part 2
2017-12-15 01:21:10
7) Shopping List IOS App - Part 1
2017-12-14 21:58:22
8) Shopping List IOS App - API Calls
2017-12-14 03:48:37
9) Delegate - Protocols - WebService
2017-12-13 04:28:23
10) NSMutableArray - NSMutableDictionary - TableViewController
2017-12-13 02:47:13
11) UITableViewController
2017-12-12 22:59:32
12) Segue Forward And Unwind
2016-02-27 03:20:22
13) GoogleMap Addon
2016-02-26 04:06:38
14) UILocalNotification With NSNotificationCenter
2016-02-25 03:51:07
15) CLLocationManager Example
2016-02-24 03:27:59
16) UIImagePickerController Using Camera And PhotoLibrary
2016-02-23 02:08:19
17) Multi Section UITableView - UIPickerView
2016-02-18 03:16:09
18) Hello World IOS App Using Swift
2016-02-17 03:10:24
19) Swift Programming Language - Playground
2016-02-15 02:06:55
20) TabBar Controller
2016-02-15 02:06:55
21) Understanding Auto Layout and Layout Constraints
2016-02-10 22:56:12
22) Shopping List App - Cloud - Part 3 - Final
2016-02-09 04:12:06
23) Shopping List App - Cloud - Part 2
2016-02-08 03:21:52
24) Shopping List App - Cloud - Part 1
2016-02-05 03:24:01
25) Protocol And Delegates With NSURLSession
2016-02-04 00:59:51
26) Webservice Using NSURLSession
2016-02-02 02:09:13
27) UIPickerView Addon - InputView And AccessoryView For UITextField
2016-02-02 02:07:12
28) Protocol And Delegates
2016-02-01 00:37:02
29) UIPickerView - Add Programmatically
2016-01-30 00:52:48
30) NSUserDefaults - UIAlertControler - Back Navigation Title Change
2016-01-29 02:01:06
31) CoreData - StudentsRecord App
2016-01-27 21:54:28
32) Manual Segue
2016-01-27 00:04:21
33) TableViewController Example
2016-01-25 02:08:16
34) NSArray And NSDictionary
2016-01-23 03:23:10
35) Reverse (Unwind) Segue
2016-01-22 00:56:28
36) ViewController - Segue - Messages
2014-12-22 05:29:28
37) WebService Example
2014-12-22 05:16:57
38) CoreData Example

© Vasudev.H / Email: tech3in@live.com