public void InitializeCell(InfiniteScrollView <CalendarViewCell> infiniteScrollView, CalendarViewCell cell, int index) { cell.ControlDelegate.DatesInteracted += dateTimes => { CalendarView v; if (_weakView.TryGetTarget(out v)) { var date = dateTimes.ElementAt(0); cell.ControlDelegate.HighlightedDates = new DateTime[] { date }; v.DateSelected?.Invoke(date); v.SelectedDate = date; cell.SetNeedsDisplay(); } }; var weakCell = new WeakReference <CalendarViewCell>(cell); CalendarView view; if (_weakView.TryGetTarget(out view)) { view.SelectedDateChanged += dateTime => { CalendarViewCell c; if (weakCell.TryGetTarget(out c)) { SelectDate(c, view.SelectedDate); } }; } }
public CalendarView(CGRect frame) : base(frame) { var del = new CalendarViewDelegate(new WeakReference <CalendarView>(this)); var infiniteScrollView = new InfiniteScrollView <CalendarViewCell>(del, frame); this.AddSubview(infiniteScrollView); Month = DateTime.Now.Date; // default starting month is the current month }
void RefreshVisibleCells(InfiniteScrollView <T> infiniteScrollView) { var visibleCells = infiniteScrollView.VisibleCells; foreach (var visibleCell in visibleCells) { var cell = visibleCell as T; var indexPath = infiniteScrollView.IndexPathForCell(cell); UpdateCell(infiniteScrollView, cell, indexPath); } }
void UpdateCell(InfiniteScrollView <T> infiniteScrollView, T cell, NSIndexPath indexPath) { var i = 0; if (indexPath.Row == 0) { i = -1; } else if (indexPath.Row == 2) { i = 1; } _del.UpdateCell(infiniteScrollView, cell, this.CurrentIndex + i); }
public void OnCurrentIndexChanged(InfiniteScrollView <CalendarViewCell> infiniteScrollView, int currentIndex) { CalendarView view; if (_weakView.TryGetTarget(out view)) { if (view.CurrentIndex > infiniteScrollView.CurrentIndex) // left { view.Month = view.Month.AddMonths(-1); } else if (view.CurrentIndex < infiniteScrollView.CurrentIndex) // right { view.Month = view.Month.AddMonths(1); } view.CurrentIndex = infiniteScrollView.CurrentIndex; } }
public void UpdateCell(InfiniteScrollView <CalendarViewCell> infiniteScrollView, CalendarViewCell cell, int index) { CalendarView view; if (_weakView.TryGetTarget(out view)) { if (infiniteScrollView.CurrentIndex < index) // right { cell.ControlDelegate.Date = view.Month.AddMonths(1); } else if (infiniteScrollView.CurrentIndex == index) // middle { cell.ControlDelegate.Date = view.Month; } else // left { cell.ControlDelegate.Date = view.Month.AddMonths(-1); } SelectDate(cell, view.SelectedDate); cell.SetNeedsDisplay(); } }