我一直在检查Tapku日历代码,搜索并阅读所有相关的问题和响应,但是似乎没有真正提供问题的正确解决方案:如何以编程方式或通过点击选择多个日期。只是一个简单的蓝色瓷砖在两个相邻的日期会让我高兴:-)下面的帖子似乎有一个类似的问题,但答案是行不通的。除非月份发生变化,否则代码中的位置不会被命中 - 这不是我想要的。更好的是selectDate的更高级实现:它将选择多个日期。但是,如果有人更熟悉代码,那么在图书馆中进行调整的合适位置将是一个很好的起点。非常感谢。
iOS: Tapku calendar library - allow selecting multiple dates for current month
答案 0 :(得分:0)
所以经过一段时间的代码后,我有一个使用锤子的基本方法。我采用了TKCalendarMonthView.m-> selectDay:day方法的大部分代码。我创建的方法基本上创建了一个新的TKCalendarMonthTiles对象并填充了细节,然后将子视图添加到主TKCalendarMonthTiles对象(self)上。我标记了子视图,因此如果它们存在于方法的开头,我可以先将它们删除,因为我只想再选择一天(如果您希望它们保留在UI中,您可以保留附加的子视图)。我不跟踪日期或存储它们或任何东西,但这符合我的需要。
我们的想法是简单地使用您想要使用的正确图块图像创建一个视图,并使用包含实际“日期”的文本标签的视图(如“14”),然后将这些视图作为子视图添加到self。借用的代码对日期图块位于网格中的“where”进行所有计算,因此视图将在正确的位置绘制。代码:
- (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-&gt; selectDay:day以及TKCalendarMonthView.m-&gt; -reactToTouch:down结束时调用此方法。到目前为止有限的测试非常好。关闭为什么时区设置一直在考虑明天(我在太平洋时区)。
干杯,迈克尔