UICollectionView 和 UICollectionViewController 类是iOS6 新引进的API,用于展示集合视图,布局更加灵活,可实现多列布局,用法类似于UITableView 和 UITableViewController 类

1.定义Cell

@interface CollectionViewCell : UICollectionViewCell

@property (strong, nonatomic) UILabel * titleLabel;

@property (strong, nonatomic) UIButton * deleButton;

@property (strong, nonatomic) UIButton * colorButton;

@property (strong, nonatomic) UILabel * numberLabel;

@end

@implementation CollectionViewCell

- (id)initWithFrame:(CGRect)frame

{

self = [super initWithFrame:frame];

if (self) {

[self initializeUserInterface];

self.contentView.layer.borderWidth = 1.0f;

self.contentView.layer.borderColor = [UIColor redColor].CGColor;

}

return self;

}

- (void) initializeUserInterface {

UIView *bgView=[[UIView alloc]initWithFrame:

CGRectMake(2, 2, CGRectGetWidth(self.bounds)-35, CGRectGetHeight(self.bounds)-5)];

bgView.layer.cornerRadius=5;

bgView.tag=13;

// bgView.layer.borderColor=GARY2_COLOR.CGColor;

bgView.layer.borderWidth=1;

[self addSubview:bgView];

self.deleButton=[UIButton buttonWithType:UIButtonTypeSystem];

self.deleButton.frame=CGRectMake(CGRectGetWidth(self.bounds)-27, 2, 27, 27);

// deleBtn.backgroundColor=[UIColor orangeColor];

[self.deleButton setBackgroundImage:GETIMAGE(@"5-1处方用药_常用药_03.png") forState:UIControlStateNormal];

// self.deleButton.tag=11;

self.deleButton.hidden=YES;

[self.contentView addSubview:self.deleButton];

_titleLabel=[[UILabel alloc]initWithFrame:CGRectMake(5, 0, CGRectGetWidth(bgView.bounds)-5, 30)];

_titleLabel.font=[UIFont boldSystemFontOfSize:20];

[self.contentView addSubview:_titleLabel];

.......

}

//-----------------

@interface ViewController : UICollectionViewController

@end

@interface ViewController ()<UICollectionViewDelegateFlowLayout,UIAlertViewDelegate>

{

NSMutableArray * _dataSource;

}

- (void)viewDidLoad {

[super viewDidLoad];

_dataSource = [NSMutableArray array];

// Do any additional setup after loading the view, typically from a nib.

// self.view.backgroundColor = [UIColor whiteColor];

[self.collectionView registerClass:[CollectionViewCell class] forCellWithReuseIdentifier:@"MYCELL"];

[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"LastCell"];

self.collectionView.backgroundColor = [UIColor whiteColor];

self.collectionView.dataSource = self;

self.collectionView.delegate = self;

UIButton * btn = [[UIButton alloc]initWithFrame:

CGRectMake(100, CGRectGetHeight(self.view.bounds)-100, 50, 30)];

[btn setTitle:@"Add" forState:UIControlStateNormal];

btn.tag = 11;

btn.backgroundColor = [UIColor purpleColor];

[btn addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:btn];

UIButton * dbtn = [[UIButton alloc]initWithFrame:

CGRectMake(200, CGRectGetHeight(self.view.bounds)-100, 50, 30)];

[dbtn setTitle:@"Mod" forState:UIControlStateNormal];

dbtn.tag = 12;

dbtn.backgroundColor = [UIColor purpleColor];

[dbtn addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:dbtn];

}

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {

return  1;

}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{

return _dataSource.count + 1;

}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

//    for (UIView * view in self.collectionView.subviews) {

//        [view removeFromSuperview];

//    }

CollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"MYCELL" forIndexPath:indexPath];

//    cell.tag = indexPath.row + 100;

if (indexPath.row < _dataSource.count) {

NSString * title =[_dataSource[indexPath.row] objectForKey:@"name"];

cell.titleLabel.text = title;

cell.numberLabel.text = [NSString stringWithFormat:@"%@g",title];

cell.deleButton.hidden = NO;

cell.deleButton.tag = 100 + indexPath.row;

[cell.deleButton addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];

}

else if (indexPath.row == _dataSource.count) {

UICollectionViewCell *  laseCell = [collectionView dequeueReusableCellWithReuseIdentifier:@"LastCell" forIndexPath:indexPath];

UIView * lastView = [[UIView alloc]initWithFrame:cell.bounds];

laseCell.layer.borderWidth = 1;

laseCell.layer.borderColor = [UIColor greenColor].CGColor;

UILabel * lastLabel = [[UILabel alloc] initWithFrame: lastView.bounds];

lastLabel.textAlignment = NSTextAlignmentCenter;

lastLabel.text = @"点击添加新药品";

lastLabel.textColor = [UIColor grayColor];

[lastView addSubview: lastLabel];

[laseCell.contentView addSubview:lastView];

return laseCell;

}

return cell;

}

-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {

return  CGSizeMake(200, 150);

}

-(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {

return UIEdgeInsetsMake(5, 5, 5, 5);

}

//返回这个UICollectionView是否可以被选择

-(BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath

{

return YES;

}

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {

NSLog(@"%@",indexPath);

//将其他cell全部变色为不可选

for (int i = 0 ; i<_dataSource.count+1 ; i++) {

NSIndexPath * mIndexPath = [NSIndexPath indexPathForItem:i inSection:0];

CollectionViewCell * mcell = (CollectionViewCell *)[collectionView cellForItemAtIndexPath:mIndexPath];

mcell.layer.borderColor = [UIColor redColor].CGColor;

}

CollectionViewCell * cell = (CollectionViewCell *)[collectionView cellForItemAtIndexPath:indexPath];

if (cell.layer.borderColor != [UIColor yellowColor].CGColor) {

cell.layer.borderWidth = 1;

cell.layer.borderColor = [UIColor yellowColor].CGColor;

} else {

cell.layer.borderColor = [UIColor redColor].CGColor;

}

//[self collectionView: self.collectionView didHighlightItemAtIndexPath:indexPath];

}

#pragma mark  -UICollertionViewDelegate-

//- (void)collectionView:(UICollectionView *)collectionView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath {

//

//}

//是否高亮,默认YES,否则不可点击

- (BOOL)collectionView:(UICollectionView *)collectionView shouldHighlightItemAtIndexPath:(NSIndexPath *)indexPath {

return  YES;

}

#pragma mark - UIAlertViewDelegate-

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {

UITextField * tf =[ alertView textFieldAtIndex: 0];

NSMutableDictionary * myDic = _dataSource[0];

[myDic setObject:tf.text forKey:@"name"];

NSIndexPath * indexPath = [NSIndexPath indexPathForRow:0  inSection:0];

[self.collectionView reloadItemsAtIndexPaths:@[indexPath]];

}

- (void) buttonPressed:(UIButton *)button{

if (button.tag == 11) {

NSMutableDictionary * dic = [NSMutableDictionary dictionary];

[dic setObject:[NSString stringWithFormat:@"%lu",(unsigned long)_dataSource.count] forKey:@"name"];

[_dataSource addObject:dic];

[self.collectionView reloadData];

} else if (button.tag == 12) {

UIAlertView * myAlert = [[UIAlertView alloc] initWithTitle:@"修改" message:@"" delegate:self cancelButtonTitle:nil otherButtonTitles:@"确定", nil];

myAlert.alertViewStyle = UIAlertViewStylePlainTextInput;

[myAlert show];

}

//删除

else if (button.tag>= 100 && button.tag <=100 + _dataSource.count) {

[_dataSource removeObjectAtIndex:button.tag - 100 ];

[self.collectionView reloadData];

//        NSIndexPath * indexPath = [NSIndexPath indexPathForRow:0 inSection:button.tag];

//

//        [self.collectionView reloadItemsAtIndexPaths:@[indexPath]];

}

}

UICollectionViewController的用法1的更多相关文章

  1. IOS中UICollectionView和UICollectionViewController的用法

    1.新建一个xib描述UICollectionViewCell(比如DealCell.xib),设置好resuse identifier(比如deal) 2.控制器继承UICollectionView ...

  2. UICollectionViewController用法

    在iOS 6 发布前,开发人员习惯使用UITableView来展示几乎所有类型的数据集合.ios 6 为 IOS 引入了全新的控制器,用来显示数据集合,集合视图控制器是与表视图控制器类似的全新UI框架 ...

  3. iOS开发之窥探UICollectionViewController(五) --一款炫酷的图片浏览组件

    本篇博客应该算的上CollectionView的高级应用了,从iOS开发之窥探UICollectionViewController(一)到今天的(五),可谓是由浅入深的窥探了一下UICollectio ...

  4. iOS开发之窥探UICollectionViewController(四) --一款功能强大的自定义瀑布流

    在上一篇博客中<iOS开发之窥探UICollectionViewController(三) --使用UICollectionView自定义瀑布流>,自定义瀑布流的列数,Cell的外边距,C ...

  5. iOS开发之窥探UICollectionViewController(一) -- Ready Your CollectionViewController

    之前用CollectionViewController只是皮毛,一些iOS从入门到精通的书上也是泛泛而谈.这几天好好的搞了搞苹果的开发文档上CollectionViewController的内容,亲身 ...

  6. UICollectionView在Swift3.0中的用法

    UICollectionView在Swift3.0中的用法 UICollectionView的初始化跟OC中是相似的,创建 GameView 集成自 UICollectionView .注意不同于UI ...

  7. iOS开发之UICollectionViewController

    1.概述 UICollectionView控件主要是用来做九宫格的,类似于android中的GridView控件.其用法与UITableView一样,首先要使控制器遵守数据源协议,再将控制器设置为UI ...

  8. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  9. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

随机推荐

  1. Qt图片显示

    1.图片截取指定大小 void Setting_TabProduct::changeImageSize(int width,int height,QString imgFile) { QPixmap ...

  2. 文件缓存tmpfs简单使用

    文件缓存tmpfs基于内存的文件系统,直接使用ram(物理内存)+swap(交换分区) tmpfs缓存文件系统/dev/shm共享内存动态的使用虚拟内存,文件删除后释放内存 特性:1.动态空间使用和动 ...

  3. 前端 -----02 body标签中相关标签

    今日内容: 字体标签: h1~h6.<font>.<u>.<b>.<strong><em>.<sup>.<sub> ...

  4. 借助dubbo-admin来管理你的服务

      1.  Github上下载最新的dubbo源码包并解压   2. 修改配置信息(打开 dubbo-admin/src/main/webapp/WEB-INF下的dubbo.properties,修 ...

  5. 解决get方法提交参数中文乱码问题:

    解决get方法提交参数中文乱码问题: 1找到你们的tomcat的目录 2在这个目录下面\tomcat61-32\tomcat61\conf 3找到server.xml ,用notepad打开(没有就下 ...

  6. ios消息机制

    ios消息机制介绍 ios 调用每一个方法的时候其实是走的ios的消息机制 举例介绍一下 创建一个Pserson类 有一个eat 对象方法 那么下面的代码可以用消息机制实现  导入消息头文件    # ...

  7. 最短路径之Bellman-Ford算法

    第一行为源点个数,边的个数m 接下来m行为a->b和权值 5 52 3 21 2 -31 5 54 5 23 4 3 Bellman-Ford算法(1): #include<iostrea ...

  8. 小学生都看得懂的C语言入门(4): 数组与函数

    // 之前判断素数, 只需要到sqrt(x)即可,//更加简单的, 判断能够比已知的小于x的素数整除, 运行更快 #include <stdio.h> // 之前判断素数, 只需要到sqr ...

  9. cf round546 cde

    第一题会卡一下同时用set和cin.. 其他的注意下矩阵对角线下标的应用即可 #include<bits/stdc++.h> using namespace std; #define ma ...

  10. 线上CPU飚高(死循环,死锁……)?帮你迅速定位代码位置

    top基本使用: top命令参考本篇文章 查看内存和CPU的top命令,别看输出一大堆,理解了其实很简单 top 命令运行图: 第一行:基本信息 第二行:任务信息 第三行:CPU使用情况 第四行:物理 ...