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

#import "WBDataGridView.h"

 - (void)viewDidLoad{

     [superviewDidLoad];

     // Do any additional setup after loading the view.

     self.view.backgroundColor = [UIColorwhiteColor];

     CGFloat margin = .f;

     CGFloat width = self.view.frame.size.width -*margin;

     // - 添加表格 - 两列

     WBDataGridView *DataGrid = [[WBDataGridViewalloc] initWithFrame:CGRectMake(margin,*margin , width, )
andColumnsWidths:@[@(width*0.4),@(width*0.6)]]; DataGrid.roundCorner = YES; [DataGrid addRecord:@[@"姓名",@"dylan_lwb_"]]; [DataGrid addRecord:@[@"性别",@"男"]]; [DataGrid addRecord:@[@"电话",@""]]; [DataGrid addRecord:@[@"邮箱",@"dylan_lwb@163.com"]]; [self.viewaddSubview:DataGrid]; // - 添加表格 - 多列 WBDataGridView *MoreDataGrid = [[WBDataGridViewalloc]initWithFrame:CGRectMake(margin,CGRectGetMaxY(DataGrid.frame) +*margin , width, )
andColumnsWidths:@[@(width*0.2),@(width*0.2),@(width*0.2),@(width*0.4)]]; MoreDataGrid.roundCorner = YES; [MoreDataGrid addRecord:@[@"姓名",@"姓名",@"姓名",@"dylan_lwb_"]]; [MoreDataGrid addRecord:@[@"性别",@"性别",@"性别",@"男"]]; [MoreDataGrid addRecord:@[@"电话",@"电话",@"电话",@""]]; [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 =;

         self.columnsWidths = columns;

         self.dy =;

         self.numRows =;

         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 =; uint dx = ; NSMutableArray* labels = [NSMutableArrayarray]; // - create the items/columns of the row for(uint i=; 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>) { 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:.821alpha:1.000]CGColor]]; [col1.layer setBorderWidth:1.0]; col1.font = [UIFontfontWithName:@"Helvetica"size:self.numRows == ? 14.0f :12.0f]; col1.textColor = [UIColordarkGrayColor]; col1.frame = rect; // - round corner if ([selfisRoundCorner:i]) { col1.layer.cornerRadius =; 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 = ; col1.attributedText = attrText; [col1 sizeToFit]; // - used to find height of longest label CGFloat h = col1.frame.size.height +; 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=; 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(,, [self.columnsWidths.firstObjectintegerValue], )]; 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-; 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 =; [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的更多相关文章

  1. iOS:集合视图UICollectionView、集合视图控制器UICollectionViewController、集合视图单元格UICollectionViewCell(创建表格的另一种控件)

    两种创建表格方式的比较:表格视图.集合视图(二者十分类似) <1>相同点:   表格视图:UITableView(位于storyboard中,通过UIViewController控制器实现 ...

  2. ios动态创建类Class

    [Objective-C Runtime动态加载]---动态创建类Class 动态创建类Class,动态添加Class成员变量与成员函数,动态变量赋值与取值,动态函数调用等方法 a.使用objc_al ...

  3. IOS基础之 (三) 类的声明和对象的创建

    一 OC类的声明和实现语法 1.接口的声明 @interface NewClassName: ParentClassName { 实例变量 ... } 方法的声明 ... @end //...表示省略 ...

  4. IOS 创建简单表视图

    创建简单表视图 此实例主要实现UITableViewDataSource协议中必需要实现的两个方法tableView:numberOfRowsInSection: 和tableView:cellFor ...

  5. iOS开发——创建你自己的Framework

    如果你想将你开发的控件与别人分享,一种方法是直接提供源代码文件.然而,这种方法并不是很优雅.它会暴露所有的实现细节,而这些实现你可能并不想开源出来.此外,开发者也可能并不想看到你的所有代码,因为他们可 ...

  6. iOS开发之窗口和视图

    视图就是应用程序的界面.视图可以使用nib文件实现,也可以使用代码创建.一个视图也是一个响应器(UIResponder的子类)这意味着一个视图可以与用户交互.因此,视图不只是用户可看到的界面,也是可以 ...

  7. iOS系列 基础篇 05 视图鼻祖 - UIView

    iOS系列 基础篇 05 视图鼻祖 - UIView 目录: UIView“家族” 应用界面的构建层次 视图分类 最后 在Cocoa和Cocoa Touch框架中,“根”类时NSObject类.同样, ...

  8. 如何:从代码创建 UML 类图(ZZ)

      您拖动的一个或多个类将显示在关系图上. 它们依赖的类将显示在"UML 模型资源管理器"中. 参见 模型表示类型的方式. 将程序代码中的类添加到 UML 模型 打开一个 C# 项 ...

  9. 利用MyEclipse自动创建PO类、hbm文件(映射文件)、DAO

    原文地址:http://blog.csdn.net/fangzhibin4712/article/details/7179414 前提条件:表sjzdfl  表sjzdxx (使用数据库MySQL) ...

随机推荐

  1. JavaScript实现StringBuffer

    function StringBuffer() { this._strings = new Array(); } StringBuffer.prototype.Append = function(_s ...

  2. [转]Mysql几种索引类型的区别及适用情况

    此为转载文章,仅做记录使用,方便日后查看,原文链接:https://www.cnblogs.com/yuan-shuai/p/3225417.html Mysql几种索引类型的区别及适用情况   如大 ...

  3. 归并排序——Java实现

    一.排序思想 将两个或两个以上的一排序文件合并成一个有序文件的过程叫归并,而归并排序就是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用.将以有序的了序列合并,得到完全有序 ...

  4. js之strict模式

    JavaScript在设计之初,为了方便初学者学习,并不强制要求用var申明变量.这个设计错误带来了严重的后果:如果一个变量没有通过var申明就被使用,那么该变量就自动被申明为全局变量: i = 10 ...

  5. 学习canvas

    canvas简介 ​ <canvas> 是 HTML5 新增的,一个可以使用脚本(通常为JavaScript)在其中绘制图像的 HTML 元素.它可以用来制作照片集或者制作简单(也不是那么 ...

  6. js 中有关字符串的操作

    1. substring(start, end) 1). 包头不包尾 2). start 必需项 3). end 非必需项 4). start end 谁大谁小无所谓 5). start end 若为 ...

  7. VC6.0静态编译注意事项

    选择静态编译(工程->常规->Microsoft基础类->使用MFC作为静态链接库)的时候,会报错:MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: ...

  8. solidity语言6

    映射 可以认为是哈希,格式 mapping(_KeyType => _ValueType) pragma solidity ^0.4.0; contract MappingExample { m ...

  9. 【Leetcode】【Easy】Symmetric Tree

    Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ...

  10. XPS 13 9360安装ubuntu 18

    XPS 13 9360安装ubuntu 18 标签(空格分隔): Linux 操作系统 1. 雷电口驱动bug 提示更新雷电口驱动bug(thunderbolt nvm for xps noteboo ...