我有两种从内部调用的方法-drawRect:
- (void)drawRect:(CGRect)rect {
if(drawScheduleFlag) {
[self drawSchedule];
drawScheduleFlag = false;
}
else
[self drawGrid];
}
-drawGrid
在初始化时调用。另一个方法 ( -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
被调用?
更新:我已经休息了,所以我很肯定它没有被调用。原网格绘制一次;当用户点击日历日期时,会调用 -calendarTouched 并完全执行。drawScheduleFlag 设置为 true,并且 -[self setNeedsDisplay] 被调用,但 -drawRect 没有。似乎 UIView 没有失效(应该是 -setNeedsDisplay ),因此 -drawRect 没有被调用。
更新#2:我有一个用于 UIViewController 的 .xib,其中包含两 (2) 个 UIView。第一个 UIView 占据了 iPad 屏幕的 1/3,第二个 UIView 占据了屏幕底部的 2/3。每个 UIView 都有自己的特定类;顶部 UIView 显示日历并且工作正常,捕捉触摸并更改所选日期。
底部的 UIView 应该显示在顶部 UIView 中选择的日期的时间表。这就是问题所在。由于顶部 UIView 正在工作,我将放置底部 UIView 类的代码。它基本上在第一次调用 -drawRect 时绘制计划网格。一旦用户选择了一天,它应该使 UIView 无效以在网格上绘制实际的时间表。
这是 Schedule.h 的代码:http: //pastebin.com/NQpj0i07这是 Schedule.m 的代码:http: //pastebin.com/YBbE8y0T 这是控制器的代码: http://pastebin。 com/nDqBCivj 请注意,从太平洋标准时间 6 月 28 日下午 5:38 起,两个 pastebin 都将在 24 小时内到期