欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

iOS中创建表格类视图WBDataGridView的实例代码

程序员文章站 2024-02-16 19:55:22
项目中创建表格, 引用头文件 #import "wbdatagridview.h" - (void)viewdidload{ [superviewdi...

iOS中创建表格类视图WBDataGridView的实例代码

项目中创建表格, 引用头文件

#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用法示例详解

下一篇: