iOS中创建表格类视图WBDataGridView的实例代码
程序员文章站
2024-02-16 19:55:22
项目中创建表格, 引用头文件
#import "wbdatagridview.h"
- (void)viewdidload{
[superviewdi...
项目中创建表格, 引用头文件
#import "wbdatagridview.h" - (void)viewdidload{ [superviewdidload]; // do any additional setup after loading the view. self.view.backgroundcolor = [uicolorwhitecolor]; cgfloat margin = 10.f; cgfloat width = self.view.frame.size.width -2*margin; // - 添加表格 - 两列 wbdatagridview *datagrid = [[wbdatagridviewalloc] initwithframe:cgrectmake(margin,4*margin , width, 0) andcolumnswidths:@[@(width*0.4),@(width*0.6)]]; datagrid.roundcorner = yes; [datagrid addrecord:@[@"姓名",@"dylan_lwb_"]]; [datagrid addrecord:@[@"性别",@"男"]]; [datagrid addrecord:@[@"电话",@"110119120"]]; [datagrid addrecord:@[@"邮箱",@"dylan_lwb@163.com"]]; [self.viewaddsubview:datagrid]; // - 添加表格 - 多列 wbdatagridview *moredatagrid = [[wbdatagridviewalloc]initwithframe:cgrectmake(margin,cgrectgetmaxy(datagrid.frame) +2*margin , width, 0) andcolumnswidths:@[@(width*0.2),@(width*0.2),@(width*0.2),@(width*0.4)]]; moredatagrid.roundcorner = yes; [moredatagrid addrecord:@[@"姓名",@"姓名",@"姓名",@"dylan_lwb_"]]; [moredatagrid addrecord:@[@"性别",@"性别",@"性别",@"男"]]; [moredatagrid addrecord:@[@"电话",@"电话",@"电话",@"110119120"]]; [moredatagrid addrecord:@[@"邮箱",@"邮箱",@"邮箱",@"dylan_lwb@163.com"]]; [self.viewaddsubview:moredatagrid]; } // wbdatagridview.h #import <uikit/uikit.h> extern nsstring *const switchbuttonstring; @interface wbdatagridview : uiview @property (retain,nonatomic) nsarray *columnswidths; @property (assign,nonatomic) nsuinteger lastrowheight; @property (retain,nonatomic) uiimage *selectedimage; @property (retain,nonatomic) uiimage *unselectedimage; @property (assign,nonatomic) bool roundcorner; - (id)initwithframe:(cgrect)frame andcolumnswidths:(nsarray*)columns; - (void)addrecord:(nsarray*)record; - (nsuinteger)selectedindex; @end // wbdatagridview.m #import "wbdatagridview.h" nsstring * const switchbuttonstring =@"switchbuttonstring"; @interface wbdatagridview () @property (assign,nonatomic) nsuinteger numrows; @property (assign,nonatomic) nsuinteger dy; @property (retain,nonatomic) nsmutablearray *switchbuttons; @end @implementation wbdatagridview - (id)initwithframe:(cgrect)frame andcolumnswidths:(nsarray*)columns{ self = [superinitwithframe:frame]; if (self) { self.numrows =0; self.columnswidths = columns; self.dy =0; self.numrows =0; self.switchbuttons = [nsmutablearrayarray]; } return self; } - (void)addrecord: (nsarray*)record { if(record.count !=self.columnswidths.count) { nslog(@"!!! number of items does not match number of columns. !!!"); return; } self.lastrowheight =42; uint dx = 0; nsmutablearray* labels = [nsmutablearrayarray]; // - create the items/columns of the row for(uint i=0; i<record.count; i++) { float colwidth = [[self.columnswidthsobjectatindex:i] floatvalue];//colwidth as given at setup cgrect rect = cgrectmake(dx, self.dy, colwidth,self.lastrowheight); // - adjust x for border overlapping between columns if(i>0) { rect.origin.x -= i; } nsstring *onerecord = [record objectatindex:i]; if ([onerecord isequaltostring:switchbuttonstring]) { // - set the switch button string as empty, create a label to adjust a cell first, then add the switch upon the label onerecord = @""; } uilabel* col1 = [[uilabelalloc] init]; [col1.layersetbordercolor:[[uicolorcolorwithwhite:0.821alpha:1.000]cgcolor]]; [col1.layer setborderwidth:1.0]; col1.font = [uifontfontwithname:@"helvetica"size:self.numrows ==0 ? 14.0f :12.0f]; col1.textcolor = [uicolordarkgraycolor]; col1.frame = rect; // - round corner if ([selfisroundcorner:i]) { col1.layer.cornerradius =5; col1.layer.maskstobounds =yes; } // - set left reght margins&alignment for the label nsmutableparagraphstyle *style = [[nsparagraphstyledefaultparagraphstyle]mutablecopy]; style.alignment =nstextalignmentcenter; nsattributedstring *attrtext = [[nsattributedstringalloc]initwithstring:onerecordattributes:@{nsparagraphstyleattributename : style}]; col1.linebreakmode =nslinebreakbycharwrapping; col1.numberoflines = 0; col1.attributedtext = attrtext; [col1 sizetofit]; // - used to find height of longest label cgfloat h = col1.frame.size.height +10; if(h > self.lastrowheight){ self.lastrowheight = h; } // - make the label width same as columns's width rect.size.width = colwidth; col1.frame = rect; [labels addobject:col1]; // - used for setting the next column x position dx += colwidth; } // - make all the labels of same height and then add to view for(uint i=0; i<labels.count; i++) { uilabel* templabel = (uilabel*)[labelsobjectatindex:i]; cgrect temprect = templabel.frame; temprect.size.height =self.lastrowheight; templabel.frame = temprect; [self addsubview:templabel]; } // - add the switch button at the first column in current row if ([record.firstobjectisequaltostring:switchbuttonstring]) { uilabel *firstlabel = labels.firstobject; uibutton *oneswitchbutton = [[uibuttonalloc] initwithframe:cgrectmake(0,0, [self.columnswidths.firstobjectintegervalue], 40)]; oneswitchbutton.center = firstlabel.center; [oneswitchbutton addtarget:selfaction:@selector(tapedswitchbutton:)forcontrolevents:uicontroleventtouchupinside]; [oneswitchbutton setbackgroundimage:self.selectedimageforstate:uicontrolstateselected]; [oneswitchbutton setbackgroundimage:self.unselectedimageforstate:uicontrolstatenormal]; [self.switchbuttonsaddobject:oneswitchbutton]; // - default selected first row button if (self.switchbuttons.firstobject == oneswitchbutton) { oneswitchbutton.selected = yes; } [self addsubview:oneswitchbutton]; } self.numrows++; // - adjust y for border overlapping beteen rows self.dy +=self.lastrowheight-1; cgrect temprect = self.frame; temprect.size.height =self.dy; self.frame = temprect; } - (void)tapedswitchbutton:(uibutton *)button { button.selected = !button.selected; [self.switchbuttonsenumerateobjectsusingblock:^(id obj,nsuinteger idx, bool *stop) { uibutton *onebutton = obj; if (onebutton != button) { onebutton.selected = no; } }]; } - (nsuinteger)selectedindex { __block nsuinteger index =0; [self.switchbuttonsenumerateobjectsusingblock:^(id obj,nsuinteger idx, bool *stop) { uibutton *onebutton = obj; if (onebutton.selected ==yes) { index = idx; *stop = yes; } }]; return index; } - (bool)isroundcorner:(nsinteger)row { return no; } @end
以上所述是小编给大家介绍的ios中创建表格类视图wbdatagridview的实例代码,希望对大家有所帮助
上一篇: java list用法示例详解