Tapku Calendar のコードを少しチェックして、ここで関連するすべての質問と回答を検索して読みましたが、問題に対する正しい解決策を実際に提供するものはないようです: プログラムまたはタップで複数の日付を選択する方法. 隣接する 2 つの日付にまたがる単純な青いタイルだけでも満足できます :-) 以下の投稿にも同様の質問があるようですが、答えはうまくいきません。月が変わらない限り、コード内の場所はヒットしません。まさに私が探しているものではありません。優れているのは、複数の日付を選択する selectDate: の高レベルの実装です。しかし、ライブラリを微調整するのにちょうどいい場所は、誰でもコードに精通している場合に開始するのに最適な場所です. とても有難い。
1 に答える
コードを少しステップ実行した後、ハンマーを使用したこの初歩的な方法が得られました。TKCalendarMonthView.m->selectDay:day メソッドのほとんどのコードを採用しました。私が作成したメソッドは基本的に、新しい TKCalendarMonthTiles オブジェクトを作成し、詳細を入力してから、メインの TKCalendarMonthTiles オブジェクト (self) にサブビューを追加します。サブビューにタグを付けて、メソッドの最初に存在する場合は最初に削除できるようにします。これは、追加の日を 1 日だけ選択したいからです (サブビューを UI に残しておきたい場合は、サブビューを添付したままにしておくことができます)。私は日付を追跡したり保存したりしませんが、これは私のニーズを満たしています。
アイデアは、使用したい正しいタイル画像と「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 の最後で呼び出します。これまでの限られたテストはとても良いです。タイムゾーンの設定がなぜ明日を考え続けるのかを理解するためにオフにします (私は太平洋時間帯にいます)。
乾杯、マイケル