iOS: Календарь Tapku: нужно выбрать несколько дат

Я немного проверял код календаря Tapku, искал и читал все соответствующие вопросы и ответы здесь, однако ни один из них, похоже, не предлагает действительно правильного решения проблемы: как выбрать несколько дат программно или нажав. Просто простая синяя плитка над двумя соседними датами сделала бы меня счастливым :-) В сообщении ниже есть похожий вопрос, но ответ не работает. Место в коде не попало, если месяц не меняется - не совсем то, что я ищу. Что было бы здорово, так это реализация selectDate более высокого уровня: она выбирала бы несколько дат. Но правильное место для настройки в библиотеке было бы отличным местом для начала, если кто-то лучше знаком с кодом. Очень признателен.

iOS: библиотека календаря Tapku - разрешить выбор нескольких дат за текущий месяц


person MichaelG    schedule 28.04.2012    source источник


Ответы (1)


Итак, после небольшого пошагового выполнения кода у меня есть этот элементарный метод с использованием молотка. Я взял большую часть кода из метода 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