Search code examples
xamarinxamarin.ioscalendarfscalendar

How to add event in FSCalendar in Xamarin.iOS


I am using FSCalendar for application purpose. The FSCalendar demo is below.

https://github.com/MarcBruins/FSCalendar-Xamarin-iOS

I try to search on SO and Google from 2 days. But I coundn't find a way to how to add event in FSCalendar.

It would pleasure if someone use this and help me to how to add event in FSCalendar.

Any Help be Appreciated.

Edit :

enter image description here

look this Image

When I click on Date 15 the event of the Date 15 is show below the calender. Hey Daily Event place. I Hope now you understand.


Solution

  • Events in FSCalendar are supplied via a DataSource, much like other datasource-based controls (i.e.UITableView).

    This example subclasses FSCalendarDataSource and added a hard-coded list of event dates (normally you would set/retrieve those via SQLite, Realm, etc...)

    public class CalendarDataSource : FSCalendarDataSource
    {
        NSCalendarUnit calenderUnits = NSCalendarUnit.Year | NSCalendarUnit.Month | NSCalendarUnit.Day;
        NSCalendar calendar = new NSCalendar(NSCalendarType.Gregorian);
        List<NSDate> events;
    
        public CalendarDataSource()
        {
            events = new List<NSDate>();
            events.Add(NSDate.Now);
            events.Add(calendar.DateByAddingUnit(NSCalendarUnit.Day, 3, NSDate.Now, NSCalendarOptions.None));
            events.Add(calendar.DateByAddingUnit(NSCalendarUnit.Day, 5, NSDate.Now, NSCalendarOptions.None));
            events.Add(calendar.DateByAddingUnit(NSCalendarUnit.Day, 7, NSDate.Now, NSCalendarOptions.None));
            events.Add(calendar.DateByAddingUnit(NSCalendarUnit.Day, 9, NSDate.Now, NSCalendarOptions.None));
        }
    
        bool SameDate(NSDate date1, NSDate date2)
        {
            return NSComparisonResult.Same == calendar.CompareDate(date1, date2, calenderUnits);
        }
    
        [Export("calendar:hasEventForDate:")]
        public override bool HasEventForDate(FSCalendar calendar, NSDate date)
        {
            return events.Any((NSDate eventDate) => (SameDate(eventDate, date)));
        }
    
        public override nint NumberOfEventsForDate(FSCalendar calendar, NSDate date)
        {
            return events.Any((NSDate eventDate) => (SameDate(eventDate, date))) ? 1 : 0;
        }
    }
    

    Then instance the datasource and assign it to your calendar instance:

    calender = new FSCalendar
    {
        Frame = View.Frame,
        DataSource = new CalendarDataSource()
    };