内部から呼び出される2つのメソッドがあります-drawRect:
- (void)drawRect:(CGRect)rect {
if(drawScheduleFlag) {
[self drawSchedule];
drawScheduleFlag = false;
}
else
[self drawGrid];
}
-drawGrid
初期化時に呼び出されます。もう1つのメソッド(-drawSchedule
)は、メインスレッドにあるこのコードから呼び出されます。
- (void) calendarTouched: (CFGregorianDate) selectedDate {
// NSLog(@"calendarTouched - currentSelectDate: %d/%d/%d", selectedDate.month, selectedDate.day, selectedDate.year);
// NSLog(@"Main thread? %d", [NSThread isMainThread]);
// get data from d/b for this date (date, staff name, cust name, time, length, services required)
//------ stub -------
scheduledDate.year = 2012;
scheduledDate.month = 6;
scheduledDate.day = 20;
staffName = @"Saori";
custName = @"Brian";
startTime.hour = 11;
duration = 2;
servicesReqd = @"Nails";
drawScheduleFlag = true;
[self setNeedsDisplay];
return;
}
コードが実行されていることはわかっていますが、スケジュールを描くことはできません。なぜ呼び出されない-[self setNeedsDisplay]
のですか?-drawRect
更新:私は休憩を入れたので、それが呼び出されていないことを確信しています。元のグリッドは1回描画されます。ユーザーがカレンダーの日付をタップすると、-calendarTouchedが呼び出され、完全に実行されます。drawScheduleFlagがtrueに設定され、-[self setNeedsDisplay]が呼び出されますが、-drawRectは呼び出されません。UIViewが無効化されていないようです(-setNeedsDisplayが行うことになっています)。したがって、-drawRectは呼び出されません。
更新#2:2つのUIViewを含むUIViewControllerの.xibがあります。最初のUIViewはiPad画面の約1/3を占め、2番目のUIViewは画面の下部2/3を占めます。各UIViewには、独自の特定のクラスがあります。上部のUIViewにはカレンダーが表示され、正しく機能しており、タッチをキャプチャして、選択した日付を変更します。
下部のUIViewは、上部のUIViewで選択された日付のスケジュールを表示することになっています。ここに問題があります。上部のUIViewが機能しているので、下部のUIViewのクラスのコードを配置します。基本的に、-drawRectが最初に呼び出されたときにスケジュールグリッドを描画します。ユーザーが1日を選択すると、UIViewを無効にして、グリッドに実際のスケジュールを描画することになっています。
これがSchedule.h のコードです:http: //pastebin.com/NQpj0i07これ がSchedule.m のコードです:http: //pastebin.com/YBbE8y0T これがコントローラーのコードです: http://pastebin。 com/nDqBCivj 両方のペーストビンは6月28日午後5時38分PSTから24時間で期限切れになることに注意してください