How to compare JSON api dates with FSCalendar and display events in tableview?

限于喜欢 提交于 2019-12-02 02:59:54

问题


I have displayed events dots in calendar but not able to display same events according to month in tableview , I want to display those events like if we change the month and tableview data events should be changed , I'am confused how it can be done . I'am using FSCalendar to display events like dot and in tableview .

import UIKit
import Alamofire
import SwiftyJSON
import ToastSwift

class CalendarViewController: UIViewController , UITableViewDataSource, UITableViewDelegate, FSCalendarDataSource, FSCalendarDelegate , FSCalendarDelegateAppearance{
    @IBOutlet weak var tableview: UITableView!

    @IBOutlet weak var menu: UIBarButtonItem!

    @IBOutlet weak var calendar: FSCalendar!

    var strcond : NSString?


    var calendarEvents : [Calendars] = []

    fileprivate lazy var dateFormatter2: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy-MM-dd"


        return formatter
    }()


    override func viewDidLoad() {
        super.viewDidLoad()

        menu.target = self.revealViewController()

        menu.action = #selector(SWRevealViewController.revealToggle(_:))

        if self.revealViewController() != nil {

            self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
            self.view.addGestureRecognizer(self.revealViewController().tapGestureRecognizer())
        }



        getCalendarEvents()



        // Do any additional setup after loading the view.
    }

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

    override func viewWillAppear(_ animated: Bool) {

    }
    override func viewDidAppear(_ animated: Bool) {
          }

    func getCalendarEvents(){

        let url = NSURL(string: "http://******/api/academics/getEvents")
        var request = URLRequest(url: url! as URL)
        request.httpMethod = "GET"
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        Alamofire.request(request).responseJSON(){ response in
            switch response.result{
            case.success(let data):
                print("success",data)

                let myresponse = JSON(data)

                for calenadar in myresponse.array!
                {
                    let calenadarObj = Calendars(calendarsJson: calenadar)
                    self.calendarEvents.append(calenadarObj)
                    print("notice",calenadarObj.Title)
                    self.compareDate(date: calenadarObj.StartDate)

            }
                self.tableview.reloadData()

            case.failure(let error):
                print("Not Success",error)
            }

        }
    }

    func compareDate(date : String){
        let date = date

        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
        let dateFromString : NSDate = dateFormatter.date(from: date)! as NSDate
        dateFormatter.dateFormat = "yyyy-MM-dd"
        let datenew = dateFormatter.string(from: dateFromString as Date)
        print("datee",datenew)



    }



    func calendar(_ calendar: FSCalendar, willDisplay cell: FSCalendarCell, for date: Date, at position: FSCalendarMonthPosition) {

        let dateFormatter3 = DateFormatter()

        dateFormatter3.dateFormat = "yyyy-MM"
        let dateString3 = dateFormatter3.string(from: date)

        //print("datenew1",dateString3)


        strcond  = dateString3 as NSString

        print("datenew1",strcond!)

    }


    func calendar(_ calendar: FSCalendar, numberOfEventsFor date: Date) -> Int {


        let dateString = self.dateFormatter2.string(from: date)




        for d in calendarEvents{
            let date = d.StartDate

            let dateFormatter = DateFormatter()
            dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
            let dateFromString : NSDate = dateFormatter.date(from: date)! as NSDate
            dateFormatter.dateFormat = "yyyy-MM-dd"
            let datenew = dateFormatter.string(from: dateFromString as Date)


        if datenew.contains(dateString) {


            return 1

        }
    }
        return 0

    }
    func calendar(_ calendar: FSCalendar, appearance: FSCalendarAppearance, eventColorFor date: Date) -> UIColor? {
        let dateString = self.dateFormatter2.string(from: date)






        for d in calendarEvents{
            let date = d.StartDate

            let dateFormatter = DateFormatter()
            dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
            let dateFromString : NSDate = dateFormatter.date(from: date)! as NSDate
            dateFormatter.dateFormat = "yyyy-MM-dd"
            let datenew = dateFormatter.string(from: dateFromString as Date)


            print("new  calendar",dateString)


        if datenew.contains(dateString) {
            return UIColor.purple
        }
        }
        return nil
    }


    func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) {
        if monthPosition == .previous || monthPosition == .next {
            calendar.setCurrentPage(date, animated: true)

            print("title date",date)
        }
    }



    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return calendarEvents.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! CalendarTableViewCell
         let getdata = calendarEvents[indexPath.row]
        let date = getdata.StartDate
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
        let dateFromString : NSDate = dateFormatter.date(from: date)! as NSDate
        dateFormatter.dateFormat = "dd-MM-yyyy"
        let datenew = dateFormatter.string(from: dateFromString as Date)

        calendar.scope = .month
        print("asdas",calendar.scope = .month)

        cell.date_txt.text = datenew
        cell.events_txt.text = getdata.Title
        calendar.reloadData()
        return cell

    }
}

i have displayed events in dots like i have image

In image i have displayed all JSON api events datas data but it should be according to calendar month data. if calendar is swiped to next month then in tableview data should load to same months events. How it can be done?

来源:https://stackoverflow.com/questions/45261579/how-to-compare-json-api-dates-with-fscalendar-and-display-events-in-tableview

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!