一聚教程网:一个值得你收藏的教程网站

热门教程

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

时间:2022-06-26 06:08:00 编辑:袖梨 来源:一聚教程网

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

 代码如下复制代码

#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:@[@"邮箱",@"[email protected]"]];

  [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:@[@"邮箱",@"邮箱",@"邮箱",@"[email protected]"]];

  [self.viewaddSubview:MoreDataGrid];

}

// WBDataGridView.h

#import

extern NSString *constSwitchButtonString;

@interfaceWBDataGridView : 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 *constSwitchButtonString =@"SwitchButtonString";

@interfaceWBDataGridView ()

@property(assign,nonatomic) NSUInteger numRows;

@property(assign,nonatomic) NSUInteger dy;

@property(retain,nonatomic) NSMutableArray *switchButtons;

@end

@implementationWBDataGridView

- (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];

  }

  returnself;

}

- (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

  {

    floatcolWidth = [[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

  {

    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;

    }

  }];

  returnindex;

}

- (BOOL)isRoundCorner:(NSInteger)row

{

  returnNO;

}

@end

热门栏目