Итак, после небольшого пошагового выполнения кода у меня есть этот элементарный метод с использованием молотка. Я взял большую часть кода из метода TKCalendarMonthView.m->selectDay:day. Созданный мной метод в основном создает новый объект TKCalendarMonthTiles и заполняет детали, а затем добавляет подпредставления к основному объекту TKCalendarMonthTiles (я). Я помечаю подпредставления, чтобы сначала избавиться от них, если они существуют в начале метода, поскольку я хочу выбрать только один дополнительный день (вы можете оставить подпредставления прикрепленными, если хотите, чтобы они оставались в пользовательском интерфейсе). Я не отслеживаю даты, не храню их или что-то еще, однако это соответствует моим потребностям.
Идея состоит в том, чтобы просто создать представление с правильным изображением плитки, которое вы хотите использовать, и такое, которое содержит текстовую метку фактической «даты», например «14», а затем добавить эти представления в качестве подвидов для себя. Заимствованный код выполняет все расчеты того, «где» эта плитка даты находится в сетке, поэтому представление рисуется в правильном месте. Код:
- (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. Ограниченное тестирование пока все хорошо. Ушел, чтобы выяснить, почему настройка часового пояса продолжает думать, что это завтра (я нахожусь в часовом поясе Тихого океана).
Привет, Майкл
person
MichaelG
schedule
09.05.2012