How to change date in JTCalendar from different month without changing the week

822 Views Asked by At

My question will be clearly understood if you first see the picture: In the first image, the date selected was March 2

First Image

But when I try to select the 28 or 29 of February, instead of staying in the same week, it moves to the previous week.Please look at the second image.

Second Image

How can I avoid that? Here are some of codes from the framework module itself:

- (void)viewDidScroll
{
if(self.contentSize.width <= 0){
    return;
}

CGSize size = self.frame.size;

switch (_pageMode) {
    case JTCalendarPageModeFull:

        if(self.contentOffset.x < size.width / 2.){
            [self loadPreviousPage];
        }
        else if(self.contentOffset.x > size.width * 1.5){
            [self loadNextPage];
        }

        break;
    case JTCalendarPageModeCenter:

        break;
    case JTCalendarPageModeCenterLeft:

        if(self.contentOffset.x < size.width / 2.){
            [self loadPreviousPage];
        }

        break;
    case JTCalendarPageModeCenterRight:

        if(self.contentOffset.x > size.width / 2.){
            [self loadNextPage];
        }

        break;
}

[_manager.scrollManager updateMenuContentOffset:(self.contentOffset.x / self.contentSize.width) pageMode:_pageMode];
}

- (void)loadPreviousPage
{
    NSDate *nextDate = [_manager.delegateManager dateForPreviousPageWithCurrentDate:_leftView.date];

// Must be set before chaging date for PageView for updating day views
self->_date = _leftView.date;

UIView<JTCalendarPage> *tmpView = _rightView;

_rightView = _centerView;
_centerView = _leftView;

_leftView = tmpView;
_leftView.date = nextDate;

[self updateMenuDates];

JTCalendarPageMode previousPageMode = _pageMode;

[self updatePageMode];

CGSize size = self.frame.size;

switch (_pageMode) {
    case JTCalendarPageModeFull:

        _leftView.frame = CGRectMake(0, 0, size.width, size.height);
        _centerView.frame = CGRectMake(size.width, 0, size.width, size.height);
        _rightView.frame = CGRectMake(size.width * 2, 0, size.width, size.height);

        if(previousPageMode == JTCalendarPageModeFull){
            self.contentOffset = CGPointMake(self.contentOffset.x + size.width, 0);
        }
        else if(previousPageMode ==  JTCalendarPageModeCenterLeft){
            self.contentOffset = CGPointMake(self.contentOffset.x + size.width, 0);
        }

        self.contentSize = CGSizeMake(size.width * 3, size.height);

        break;
    case JTCalendarPageModeCenter:
        // Not tested

        _leftView.frame = CGRectMake(- size.width, 0, size.width, size.height);
        _centerView.frame = CGRectMake(0, 0, size.width, size.height);
        _rightView.frame = CGRectMake(size.width, 0, size.width, size.height);

        self.contentSize = size;

        break;
    case JTCalendarPageModeCenterLeft:

        _leftView.frame = CGRectMake(0, 0, size.width, size.height);
        _centerView.frame = CGRectMake(size.width, 0, size.width, size.height);
        _rightView.frame = CGRectMake(size.width * 2, 0, size.width, size.height);

        self.contentOffset = CGPointMake(self.contentOffset.x + size.width, 0);
        self.contentSize = CGSizeMake(size.width * 2, size.height);

        break;
    case JTCalendarPageModeCenterRight:

        _leftView.frame = CGRectMake(- size.width, 0, size.width, size.height);
        _centerView.frame = CGRectMake(0, 0, size.width, size.height);
        _rightView.frame = CGRectMake(size.width, 0, size.width, size.height);

        self.contentSize = CGSizeMake(size.width * 2, size.height);

        break;
}

// Update dayViews becuase current month changed
[_rightView reload];
[_centerView reload];

if(_manager.delegate && [_manager.delegate respondsToSelector:@selector(calendarDidLoadPreviousPage:)]){
    [_manager.delegate calendarDidLoadPreviousPage:_manager];
}
}
0

There are 0 best solutions below