上个月做一个项目的时候需要开发一个课表,于是就自己动手画了一个。下面先上效果图
因为代码基本就是画图的代码,所以在此i不详细解析了,有兴趣的孩纸可以到github上下载(ScheduleGridView),链接点击这里==>点击打开链接
下面简单说一下使用方法,该view使用delegate来对数据进行操作,其protocol定义如下:
@protocol XBaseGridViewDelegate <NSObject>
- (float)heightForCellInRow:(NSInteger)row;
- (float)widthForCellInColumn:(NSInteger)col;
- (NSInteger)numberOfRow;
- (NSInteger)numberOfColumn;
- (NSString *)topBarLabelStringForIndex:(NSInteger)index;
- (NSString *)xLabelStringForIndex:(NSInteger)index;
- (NSString *)yLabelStringForIndex:(NSInteger)index;
- (NSArray *)arrayForCourses;
- (NSInteger)numberOfTopBarLabels;
@end
使用的时候在ViewController中添加以下这个view:
CGRect frame =self.view.bounds;
XGridView *scheduleTable = [XGridViewgridViewWithDelegate:selfframe:frame];
[self.viewaddSubview:scheduleTable];
view需要一些数据,例如其x轴,y轴标签及其数据。在这里,该view市作为一个课程格子使用,因此他需要的是课程节次,星期,周,以及课程这些数据,我们可以定义如下:
scheduleArray = [NSArrayarray];
weekLabels = [NSMutableArrayarray];
for (int i=1;i<=20;i++) [weekLabels addObject:[NSStringstringWithFormat:@"%i", i]];
xLabels =@[@"星期日",@"星期一",@"星期二",@"星期三",@"星期四",@"星期五",@"星期六"];
yLabels =@[@"1", @"2", @"3",@"4", @"5",@"6", @"7",@"8", @"9",@"10", @"11",@"12"];
CGRect frame =self.view.bounds;
scheduleTable = [XGridViewgridViewWithDelegate:selfframe:frame];
[self.viewaddSubview:scheduleTable];
scheduleArray = [selfgetCourseFromDatabase];
这里解释一下,在这个课程view里面,我们从上面的效果图可以看出其拥有一个垂直的YLabel,两个水平的XLabel,以及若干个呈现数据的格子。其中weekLabels是第一个从上至下XLabel的数据,即周次,为1~20周;xLabels是第二个XLabel的数据,即哪一天,为周日到周六;yLabels则为垂直的YLabel的数据,即课程节次,为1~12节。scheduleArray是至关重要的,它是该view的数据内容。那么,下面说一下这个array的内容如何定义:
scheduleArray的每一个元素都是一个NSDictionary,其内容为:
NSMutableDictionary *course1 = [NSMutableDictionarydictionary];
[course1 setObject:@"不告诉你"forKey:@"courseName"];
[course1 setObject:@"你猜"forKey:@"teacherName"];
[course1 setObject:@"东九"forKey:@"place"];
[course1 setObject:@"1|2"forKey:@"sectionNumber"];
[course1 setObject:@"星期三"forKey:@"weekDay"];
[course1 setObject:@"1|2|3|4|5|6|7|8"forKey:@"weekNumber"];
[course1 setObject:@(0)forKey:@"color"];
其中需要说明的是,weekDay是哪一天,是一个单一的值,为星期一到星期天其中任意一个;sectionNumber是指课程时间是在weekDay的哪几节,以 ‘|’ 分割;weekNumber是哪一周,也是以 ‘|’ 分割。color是指定这个课程在view中显示格子的颜色,是一个整型值,是0~2其中一个,其实就是在XGridBaseView.m中定义的一个数组,包装了3种颜色,读者可以进行修改,也可以以delegate方式返回:
colorArray =@[mColorMainTint,mColorSchedulePurple, mColorScheduleYellow];
其中mColorMainTint,mColorSchedulePurple,mColorScheduleYellow都是一些宏定义,读者也可以自行修改。
最后说一下protocol定义的方法如何使用,在ViewController中定义好数据之后,便可通过delegate对数据进行修改:
- (NSInteger)numberOfColumn
{
return7;
}
- (NSInteger)numberOfRow
{
return12;
}
- (float)widthForCellInColumn:(NSInteger)col
{
return80;
}
- (float)heightForCellInRow:(NSInteger)row
{
return60;
}
- (NSString *)topBarLabelStringForIndex:(NSInteger)index
{
return [weekLabelsobjectAtIndex:index];
}
- (NSString *)xLabelStringForIndex:(NSInteger)index
{
return [xLabelsobjectAtIndex:index];
}
- (NSString *)yLabelStringForIndex:(NSInteger)index
{
return [yLabelsobjectAtIndex:index];
}
- (NSInteger)numberOfTopBarLabels
{
returnweekLabels.count;
}
- (NSArray *)arrayForCourses
{
returnscheduleArray;
}
从上而下分别是操作列数,行数,列宽,行高,topBar(即第一个XLabel)的值,xLabel的值,yLabel的值,topBar的标签数量,最后是课程数据。
至此,该View的使用说明就到此结束。有兴趣的朋友可以下载下来使用以及改进,也可以给我提出相关的建议。代码可能写的不是很好,多有纰漏,还请谅解。谢谢!
再次附上github地址:
https://github.com/Ivanzgj/ScheduleGridView