MNCalendarView
MNCalendarView copied to clipboard
Need a delegate method to scroll to selectedDate.
Am I missing this somewhere? I have combed through the code and am not seeing a way to dynamically scroll the calendarView.
@stevewirig see the forks. I sow this feature in some one.
This is what I added myself, where date is the beginning of the month that you want.
- (void)scrollToDate:(NSDate *)date { [self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:[_monthDates indexOfObject:date]] atScrollPosition:UICollectionViewScrollPositionTop animated:NO]; }
Hi there,
I have added the mentioned method but am getting below crash.
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'attempt to scroll to invalid index path: <NSIndexPath: 0xb736db0> {length = 2, path = 2147483647 - 0}'
I am having trouble with this as well, any updates?
Corrected Answer:
[calendarView.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:1] atScrollPosition:UICollectionViewScrollPositionTop animated:YES];
Pass the selected date index path.
I know this is kind of old, but I found that this method works better. If you have any improvements let me know!
-(void) scrollToDate:(NSDate*) date withAnimation: (BOOL) animate{
NSDateComponents *dateComponents = [self.calendar components:(NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:[NSDate date]];
dateComponents.day = 1;
NSDate *beginningOfMonth = [self.calendar dateFromComponents:dateComponents];
NSInteger month = [[self.calendar components:NSCalendarUnitMonth fromDate:beginningOfMonth toDate:date options: 0] month];
NSIndexPath* index = [NSIndexPath indexPathForItem:0 inSection:month];
UICollectionViewLayoutAttributes *attributes = [self.collectionView layoutAttributesForItemAtIndexPath:index];
CGRect rect = attributes.frame;
rect.origin.y += self.bounds.size.height - 30-44;
[self.collectionView scrollRectToVisible:rect animated:animate];
}
Hello Dehli,
I happened upon your code and there is an issue when scrolling to a date that is before the visible date on screen. I have made some changes, now it will work regardless of scroll direction.
-(void) scrollToDate:(NSDate*)date animated:(BOOL)animated
{
NSDateComponents *dateComponents = [self.calendar components:(NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:self.fromDate];
dateComponents.day = 1;
NSDate *beginningOfMonth = [self.calendar dateFromComponents:dateComponents];
NSInteger month = [[self.calendar components:NSCalendarUnitMonth fromDate:beginningOfMonth toDate:date options: 0] month];
NSIndexPath* index = [NSIndexPath indexPathForItem:0 inSection:month];
UICollectionViewLayoutAttributes *attributes = [self.collectionView layoutAttributesForItemAtIndexPath:index];
CGRect rect = attributes.frame;
int offset = 44;
if ([self.collectionView contentOffset].y > rect.origin.y)
offset -= 64;
rect.origin.y += self.bounds.size.height - offset - 568;
rect.size = CGSizeMake(320, 568);
[self.collectionView scrollRectToVisible:rect animated:animated];
}