0

我一直在检查 Tapku 日历代码,并在这里搜索并阅读了所有相关的问题和回复,但似乎没有一个真正为问题提供正确的解决方案:如何以编程方式或通过点击选择多个日期。只需在两个相邻日期上放置一个简单的蓝色瓷砖就会让我高兴:-) 下面的帖子似乎有一个类似的问题,但答案不起作用。除非月份发生变化,否则代码中的位置不会被命中 - 这不正是我想要的。更好的是 selectDate 的更高级别的实现:它将选择多个日期。但是,如果任何人都更熟悉代码,那么在库中进行调整的正确位置将是一个很好的起点。非常感激。

iOS:Tapku 日历库 - 允许为当月选择多个日期

4

1 回答 1

0

因此,在逐步浏览代码之后,我有了这个使用锤子的基本方法。我采用了 TKCalendarMonthView.m->selectDay:day 方法中的大部分代码。我创建的方法基本上是创建一个新的 TKCalendarMonthTiles 对象并填写详细信息,然后将子视图添加到主 TKCalendarMonthTiles 对象(self)上。我标记了子视图,因此如果它们在方法开始时存在,我可以首先将它们删除,因为我只想再选择一天(如果您希望它们保留在 UI 中,可以将子视图保留为附加状态)。我不跟踪日期或存储它们或任何东西,但这符合我的需要。

这个想法是简单地创建一个视图,其中包含您要使用的正确平铺图像以及包含实际“日期”的文本标签(如“14”)的视图,然后将这些视图作为子视图添加到 self. 借用的代码对日期图块在网格中的“位置”进行所有计算,因此视图绘制在正确的位置。代码:

- (void)markDay:(int)day {

// First, remove any old subviews
[[self viewWithTag:42] removeFromSuperview];
[[self viewWithTag:43] removeFromSuperview];

int pre = firstOfPrev < 0 ?  0 : lastOfPrev - firstOfPrev + 1;
int tot = day + pre;
int row = tot / 7;
int column = (tot % 7)-1;

TKCalendarMonthTiles *deliveryTile = [[TKCalendarMonthTiles alloc] init];
deliveryTile.selectedImageView.image = [UIImage imageWithContentsOfFile:TKBUNDLE(@"TapkuLibrary.bundle/Images/calendar/MyDateTile.png")];
deliveryTile.currentDay.text = [NSString stringWithFormat:@"%d",day];

if(column < 0){
    column = 6;
    row--;
}

CGRect r = deliveryTile.selectedImageView.frame;
r.origin.x = (column*46);
r.origin.y = (row*44)-1;
deliveryTile.selectedImageView.frame = r;
deliveryTile.currentDay.frame = r;
[[deliveryTile selectedImageView] setTag:42];
[[deliveryTile currentDay] setTag:43];
[self addSubview:deliveryTile.selectedImageView];
[self addSubview:deliveryTile.currentDay];
} // markDay:

我在 TKCalendarMonthView.m->selectDay:day 的末尾以及 TKCalendarMonthView.m->-reactToTouch:down 的末尾调用此方法。到目前为止,有限的测试非常好。关闭以弄清楚为什么时区设置一直在考虑明天(我在太平洋时区)。

干杯,迈克尔

于 2012-05-09T20:50:32.517 回答