Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Need a delegate method to scroll to selectedDate. #10

Open
stevewirig opened this issue Oct 4, 2013 · 7 comments
Open

Need a delegate method to scroll to selectedDate. #10

stevewirig opened this issue Oct 4, 2013 · 7 comments

Comments

@stevewirig
Copy link

Am I missing this somewhere? I have combed through the code and am not seeing a way to dynamically scroll the calendarView.

@ghost
Copy link

ghost commented Oct 6, 2013

@stevewirig see the forks. I sow this feature in some one.

@johnrickman
Copy link

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];
    }

@nivaskarthik
Copy link

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}'

@mrbagels
Copy link

mrbagels commented Jan 5, 2014

I am having trouble with this as well, any updates?

@nivaskarthik
Copy link

Corrected Answer:

[calendarView.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:1] atScrollPosition:UICollectionViewScrollPositionTop animated:YES];

Pass the selected date index path.

@dehli
Copy link

dehli commented Apr 11, 2014

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];
}

@Mackarous
Copy link

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];
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants