iOS之创建表格类视图WBDataGridView
项目中创建表格, 引用头文件
#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的更多相关文章
- iOS:集合视图UICollectionView、集合视图控制器UICollectionViewController、集合视图单元格UICollectionViewCell(创建表格的另一种控件)
两种创建表格方式的比较:表格视图.集合视图(二者十分类似) <1>相同点: 表格视图:UITableView(位于storyboard中,通过UIViewController控制器实现 ...
- ios动态创建类Class
[Objective-C Runtime动态加载]---动态创建类Class 动态创建类Class,动态添加Class成员变量与成员函数,动态变量赋值与取值,动态函数调用等方法 a.使用objc_al ...
- IOS基础之 (三) 类的声明和对象的创建
一 OC类的声明和实现语法 1.接口的声明 @interface NewClassName: ParentClassName { 实例变量 ... } 方法的声明 ... @end //...表示省略 ...
- IOS 创建简单表视图
创建简单表视图 此实例主要实现UITableViewDataSource协议中必需要实现的两个方法tableView:numberOfRowsInSection: 和tableView:cellFor ...
- iOS开发——创建你自己的Framework
如果你想将你开发的控件与别人分享,一种方法是直接提供源代码文件.然而,这种方法并不是很优雅.它会暴露所有的实现细节,而这些实现你可能并不想开源出来.此外,开发者也可能并不想看到你的所有代码,因为他们可 ...
- iOS开发之窗口和视图
视图就是应用程序的界面.视图可以使用nib文件实现,也可以使用代码创建.一个视图也是一个响应器(UIResponder的子类)这意味着一个视图可以与用户交互.因此,视图不只是用户可看到的界面,也是可以 ...
- iOS系列 基础篇 05 视图鼻祖 - UIView
iOS系列 基础篇 05 视图鼻祖 - UIView 目录: UIView“家族” 应用界面的构建层次 视图分类 最后 在Cocoa和Cocoa Touch框架中,“根”类时NSObject类.同样, ...
- 如何:从代码创建 UML 类图(ZZ)
您拖动的一个或多个类将显示在关系图上. 它们依赖的类将显示在"UML 模型资源管理器"中. 参见 模型表示类型的方式. 将程序代码中的类添加到 UML 模型 打开一个 C# 项 ...
- 利用MyEclipse自动创建PO类、hbm文件(映射文件)、DAO
原文地址:http://blog.csdn.net/fangzhibin4712/article/details/7179414 前提条件:表sjzdfl 表sjzdxx (使用数据库MySQL) ...
随机推荐
- Javaweb三大组件-过滤器、监听器
1. 过滤器 [filter] 作用: 对单个获取多个servlet起到增强[advice]的作用. 用于在所有的servlet执行前,做一些预处理.例如:做编码处理, 访问量统计[servletCo ...
- mvc中RedirectToAction()如何传参?
今天在做一个功能的时,使用RedirectToAction()需要从这里传几个参数,从网上查了一下,这样解决.真好. Return RedirectToAction("Index" ...
- python 之闭包
原文 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_sum(*args): a ...
- JQuery和html+css实现鼠标点击放烟花
<!DOCTYPE html> <html> <head><meta http-equiv="Content-Type" content= ...
- canvas玩转微信红包
CSS3相关属性: <!DOCTYPE html> <html> <head lang='en'> <meta charset='UTF-8'/> &l ...
- 用户选择wordpress程序建站需要知道的一些事情 - 安全、优化速度、配置
WordPress是我们使用最多的CMS程序之一,无论是我们的个人博客,还是企业网站,甚至中小型站点,我们都可以用WP程序部署.我们看到海外网站的时候,大部分都是用的WORDPRESS程序.在我们国人 ...
- Hbase到Solr同步常用操作
Hbase到Solr同步常用操作 1. 整体流程 2. 常用操作 Hbase常用操作 Solr常用操作 hbase-index常用操作 3. 其他资料 Lily HBase Indexer使用整理 h ...
- attention机制的实现
本文转自,http://www.jeyzhang.com/understand-attention-in-rnn.html,感谢分享! LSTM 中实现attention:https://distil ...
- matlab练习程序(Bresenham画线)
Bresenham画线算图形学中最基础的知识了,可惜我并没有选修过图形学,所有还是有必要熟悉一下. 上一篇用到的画线函数应该算是数值微分法,也是我最常用的一种方法,不过这种方法似乎并不是很好. 这里的 ...
- matlab练习程序(演化策略ES)
还是这本书上的内容,不过我看演化计算这一章是倒着看的,这里练习的算法正好和书中介绍的顺序是相反的. 演化策略是最古老的的演化算法之一,和上一篇DE算法类似,都是基于种群的随机演化产生最优解的算法. 算 ...