UICollectionViewController的用法1

时间:2022-04-26 04:55:44

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]];

}

}