当前位置: 移动技术网 > IT编程>移动开发>IOS > iOS中创建表格类视图WBDataGridView的实例代码

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

谢沧行是谁,nba季前赛视频直播,唐长红

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

#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的实例代码,希望对大家有所帮助

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网