Ios 如何在不更改周的情况下更改不同月份的日历中的日期
如果你首先看到图片,我的问题就会被清楚地理解: 在第一张图片中,选择的日期是3月2日 但当我尝试选择2月28日或29日,而不是停留在同一周,它会移到前一周。请看第二张图片 我怎样才能避免呢? 以下是框架模块本身的一些代码:Ios 如何在不更改周的情况下更改不同月份的日历中的日期,ios,objective-c,jtcalendar,Ios,Objective C,Jtcalendar,如果你首先看到图片,我的问题就会被清楚地理解: 在第一张图片中,选择的日期是3月2日 但当我尝试选择2月28日或29日,而不是停留在同一周,它会移到前一周。请看第二张图片 我怎样才能避免呢? 以下是框架模块本身的一些代码: - (void)viewDidScroll { if(self.contentSize.width <= 0){ return; } CGSize size = self.frame.size; switch (_pageMode) { case
- (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];
}
}
-(无效)视图显示滚动
{
如果(self.contentSize.width size.width*1.5){
[自动加载下一页];
}
打破
案例jtpagemodecenter:
打破
案例JTCalendarPageModeCenterLeft:
if(self.contentOffset.xsize.width/2){
[自动加载下一页];
}
打破
}
[\u manager.scrollManager updatementucontentofset:(self.contentOffset.x/self.contentSize.width)页面模式:\u页面模式];
}
-(无效)加载上一页
{
NSDate*nextDate=[\u manager.delegateManager dateForPreviousPageWithCurrentDate:\u leftView.date];
//必须在更改页面视图的日期之前设置,以更新日视图
self->\u date=\u leftView.date;
UIView*tmpView=_rightView;
_右视图=_中心视图;
_中心视图=_leftView;
_leftView=tmpView;
_leftView.date=nextDate;
[自我更新编辑];
JTCalendarPageMode previousPageMode=\u pageMode;
[自我更新模式];
CGSize size=self.frame.size;
开关(页面模式){
案例JTCalendarPageModeFull:
_leftView.frame=CGRectMake(0,0,size.width,size.height);
_centerView.frame=CGRectMake(尺寸.width,0,尺寸.width,尺寸.height);
_rightView.frame=CGRectMake(size.width*2,0,size.width,size.height);
如果(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);
打破
案例jtpagemodecenter:
//未经测试
_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=大小;
打破
案例JTCalendarPageModeCenterLeft:
_leftView.frame=CGRectMake(0,0,size.width,size.height);
_centerView.frame=CGRectMake(尺寸.width,0,尺寸.width,尺寸.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);
打破
案例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);
打破
}
//更新日视图,因为当月已更改
[_rightView重新加载];
[_centerView重新加载];
if(_manager.delegate&&[_manager.delegate respondsToSelector:@selector(calendarDidLoadPreviousPage:)){
[\u manager.delegate calendar上一页:\u manager];
}
}
我也在使用JTCalendar,但我没有遇到您提到的任何问题。我发现一件事是,它正在移到上个月。它看起来是正确的。但是如果我想在上面的图片中看到日期28或29,我怎么能看到它呢?(我在第二幅图中选择了29个日期)它正确地将月份显示为二月。但是它显示的是二月的最后一周!!获取?您使用的是月视图还是周视图?我在6个月前使用过,我无法从您的代码中理解抱歉。我使用的是周视图。但在一周内,如果有两个月的日期,则在选择该月的任何一个日期时,都不能正确显示该周。相反,它会根据我们的选择向左或向右移动。