首页 > 系统 > iOS > 正文

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

2020-07-26 02:56:55
字体:
来源:转载
供稿:网友

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

#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的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表