zoukankan      html  css  js  c++  java
  • UICollectionViewController的用法1

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

        }

     

    }

  • 相关阅读:
    C# List转换成DataTable
    表达式计算
    通过GitHub高级条件组合精确搜索开源项目学习
    今天开通博客啦 随便记录一下东西
    VSCode开发Vue-代码格式化最完美设置
    C# DataTable 行转列 列转行 同时转换
    [转载]DevExpress GridControl 使用方法技巧 总结 收录整理
    控件已成功添加到工具箱中,但未在活动设计器中启用
    js-beautify 不换行
    tomcat端口修改后在Eclipse中启动无效问题解决
  • 原文地址:https://www.cnblogs.com/qzp2014/p/4256101.html
Copyright © 2011-2022 走看看