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

#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. c#-FrameWork01

    Framwork ArrayList l  集合类似于数组,同样是用来存放连续数据的,但集合的功能比数组更强大 l  集合和数组的最大区别:数组一旦定义以后就无法改变其大小,而集合可以动态的改变其大小 ...

  2. git pull冲突报错

    修改代码后在git pull报错: error: Your local changes to the following files would be overwritten by merge: xx ...

  3. 02.ArrayList和HashTable

    ArrayList集合 数组的缺点: (1).数组只能存储相同类型的数据. (2).数组的长度要在定义时确定. 集合的好处: (1).集合可以存储多种不同类型的数据. (2).集合的长度是可以任意改变 ...

  4. 进程和程序(Process and Program)

    原出处:http://oss.org.cn/kernel-book/ch04/4.1.htm ----------------------------------个人理解分割线------------ ...

  5. PAT 1043 Is It a Binary Search Tree

    #include <cstdio> #include <climits> #include <cstdlib> #include <vector> co ...

  6. vue——组件

    一.组件概念 vue的核心基础就是组件的使用,玩好了组件才能将前面学的基础更好的运用起来.组件的使用更使我们的项目解耦合.更加符合vue的设计思想MVVM. // 定义一个名为 button-coun ...

  7. js时间与时间戳之间的转换操作,返回天、小时、分,全家桶

    1.将时间戳转换成时间 var formatDate = function(d) {  var now = new Date(d); var year = now.getFullYear(); var ...

  8. js获取css的各种样式并且设置他们

    js原生获取css样式,并且设置,看似简单,其实并不简单,我们平时用的ele.style.样式,只能获取内嵌的样式,但是我们写的样式基本都在style属性里面; 这里我们就需要: 下面这个代码主要是设 ...

  9. C++基础--字符串倒序输出

    (一)用基本的数组实现 #include "stdafx.h" #include <stdio.h> #include <string.h> int mai ...

  10. python随机生成手机号码

    一句话生成电话号码random.choice(['139','188','185','136','158','151'])+"".join(random.choice(" ...