ios自定义gridview

本文介绍了一款自定义绘制的课程表视图组件,包括其实现原理与使用方法。该组件采用delegate模式来处理数据,并支持灵活配置课程表的各项参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上个月做一个项目的时候需要开发一个课表,于是就自己动手画了一个。下面先上效果图





因为代码基本就是画图的代码,所以在此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,mColorSchedulePurplemColorScheduleYellow];


其中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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值