kvc和collectionView和反选cell

1.//key值没找到对应的属性,会触发此方法

- (void)setValue:(id)value forUndefinedKey:(NSString *)key

{

//因为这里的id是系统自带的属性,所以不能在定义的model里,而是要设置成不是系统属性的ID,但是后面要用kvc语句所以model的.m文件先预判即可

if ([key isEqualToString:@"id"]) {

self.ID=value;

}

//key 没有属性对应的key,可以打印查看

NSLog(@"undefined key:%@",key);

}

****注意这里****

[model setValuesForKeysWithDictionary:subDict];

for (NSString *key in subDict) {

id obj = [subDict objectForKey:key];

[model setValue:obj forKey:key];

2.//从自定义xib中加载cell 会触发此方法,在.m文件中自己添加该方法

- (void)awakeFromNib{

NSLog(@"awake!");

//给cell设置选中之后的背景视图

UIView *view = [[UIView alloc] init];

view.backgroundColor = [UIColor lightGrayColor];

//view的frame 会自动设置与cell bounds一致

self.selectedBackgroundView = view;

//self.backgroundView

}

3.图片的圆角设计

iconImageView.layer.masksToBounds = YES;

iconImageView.layer.cornerRadius = 8;

4.UICollectionView

#import "RootViewController.h"

#import "MyCell.h"

#import "CustomView.h"

@interface RootViewController ()

{

//集合视图,iOS6之后出现的视图控件,与UITableView类似,最大的特点是可以对cell实现灵活的布局

//UICollectionView 使用的cell为UICollectionViewCell

UICollectionView *_collectionView;

}

@end

@implementation RootViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

{

self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

if (self) {

// Custom initialization

}

return self;

}

- (void)viewDidLoad

{

[super viewDidLoad];

//偏移量重置为0,0

self.automaticallyAdjustsScrollViewInsets = NO;

//UICollectionViewLayout 集合视图的布局类,是一个抽象基类,一般使用它的子类实现对cell的布局

//UICollectionViewFlowLayout 系统提供的,能够实现cell的网格布局

UICollectionViewFlowLayout *flow = [[UICollectionViewFlowLayout alloc] init];

[flow setScrollDirection:UICollectionViewScrollDirectionVertical];

//设置横向的最小间隔,如果CollectionView垂直滚动能直接生效

flow.minimumLineSpacing = 3;

//设置纵向的最小间隔,CollectionView垂直滚动 实际间隔需要根据item的size 和edgesInsets的值来调节

flow.minimumInteritemSpacing =0;

//利用布局对象,实现集合视图的初始化

//UIScreen 代表手机屏幕类 ,单例

//[UIScreen mainScreen].bounds.size 获取手机屏幕的大小

_collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0,64,[UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height-64) collectionViewLayout:flow];

_collectionView.delegate = self;

_collectionView.dataSource = self;

//将xib定制的cell提前注册到UICollectionView

//iOS6之后出现的技术,能够提高集合视图的运行效率

[_collectionView registerNib:[UINib nibWithNibName:@"MyCell" bundle:nil] forCellWithReuseIdentifier:@"cell"];

//[_collectionView registerClass:<#(__unsafe_unretained Class)#> forCellWithReuseIdentifier:<#(NSString *)#>]

//注册CustomView为集合视图的sectionHeaderView,并设置重用标识符

[_collectionView registerClass:[CustomView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"supple"];

//设置SectionFooterView

[_collectionView registerClass:[CustomView class] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"supple"];

[self.view addSubview:_collectionView];

// Do any additional setup after loading the view.

}

#pragma mark - Delegate

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

NSLog(@"selected item:%d",indexPath.item);

}

#pragma mark - DataSource

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

return 1;

}

//一个section 有多少个Item(cell)

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

return 10;

}

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

static NSString *cellIde = @"cell";

//通过重用标识符和indexPath到UICollectionView的重用队列中获取cell对象,因为已经提前注册了cell,如果获取不到cell对象,UICollectionView会根据注册的cell样式,自动创建cell对象

MyCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIde forIndexPath:indexPath];

//为cell的控件赋值

cell.headerImageView.image = [UIImage imageNamed:@"0.png"];

cell.titleLabel.text = @"test";

return cell;

}

//通过此方法为section的headerView和footerView赋值

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{

static NSString *viewIde = @"supple";

//从重用队列中获取视图,取不到  则自动创建

CustomView *view = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:viewIde forIndexPath:indexPath];

//可以为view赋值

//判断是header还是footer 赋不同的值

if ([kind isEqualToString:UICollectionElementKindSectionHeader]) {

view.backgroundColor = [UIColor yellowColor];

}else if ([kind isEqualToString:UICollectionElementKindSectionFooter]){

view.backgroundColor = [UIColor blueColor];

}

return view;

}

#pragma mark - delegate flow layout

//指定每一个item的大小

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

return CGSizeMake(150,120);

}

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section{

//如果垂直滚动 view的width与集合视图一致,需要设置高度

return CGSizeMake(30,30);

}

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section{

return CGSizeMake(30,30);

}

//UIEdgeInsets 描述的是一个视图相对于另一个视图上、左、下、右的距离

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

return UIEdgeInsetsMake(10,8,10,8);

}

- (void)didReceiveMemoryWarning

{

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

时间: 2024-10-11 22:03:25

kvc和collectionView和反选cell的相关文章

iOS点击cell查看大图,点击大图还原小图-b

一.项目需求 用collectionView展示很多照片,点击某个照片,用全屏scrollView无限循环的方式查看图片.点击放大的图片,图片缩小到原先的尺寸. 如图gif1.gif所示,点击中间的图片,放大图片,滑动图片.再点击大图,图片回到相应的位置. gif1.gif 如图gif2.gif所示.当前显示的图片不在屏幕中,点击大图后,若图片在屏幕顶部,则回到顶部:若在底部,则回到底部. gif2.gif 二.常见场景 微博.微信的相册:九宫格展示照片,点击某个图片,图片添加到scrollVi

CollectionView 简用

创建一个CollectionView 分为几个步骤 1.先创建布局FlowLayout 设置布局格式 2.创建CollectionView 并使用布局Flowlayout  -initWithFrame: collectionViewLayout: 3.遵循协议delegate dataSource 4.注册cell 5.添加到view #import "ViewController.h"#import "reusableview.h" - (void)viewDi

关于CollectionView布局问题

个人在做新特性界面时,时长会犯的错误,总结一下,希望对大家有帮助. 1.如果我们使用的是storyboard中的CollectionView,它的布局继承的是 UICollectionViewFlowLayout:大部分情况下我们会用到它:CollectionView中的cell没有UILable,UIImageView等控件,所以一般我们会自定义cell,并创建相应的xib来注册注册重用的cell [self.collectionView registerNib:[UINib nibWithN

iOS 8 自适应 Cell

在使用 table view 的时侯经常会遇到这样的需求:table view 的 cell 中的内容是动态的,导致在开发的时候不知道一个 cell 的高度具体是多少,所以需要提供一个计算 cell 高度的算法,在每次加载到这个 cell 的时候计算出 cell 真正的高度. 在 iOS 8 之前 没有使用 Autolayout 的情况下,需要实现 table view delegate 的 tableView(tableView: UITableView, heightForRowAtInde

collectionView的案例

#import "ViewController.h" #import "CollectionViewCell.h" @interface ViewController ()<UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout> @property (weak, nonatomic) IBOutlet UICollectionView

iOS点击cell查看大图,点击大图还原小图

一.项目需求 用collectionView展示很多照片,点击某个照片,用全屏scrollView无限循环的方式查看图片.点击放大的图片,图片缩小到原先的尺寸. 如图gif1.gif所示,点击中间的图片,放大图片,滑动图片.再点击大图,图片回到相应的位置. gif1.gif 如图gif2.gif所示.当前显示的图片不在屏幕中,点击大图后,若图片在屏幕顶部,则回到顶部:若在底部,则回到底部. gif2.gif 二.常见场景 微博.微信的相册:九宫格展示照片,点击某个图片,图片添加到scrollVi

商品详情页面特殊制作,获取网页的高度,collectionView根据内容的变化其高度也随着变化

商品详情页面特殊制作,获取网页的高度,collectionView根据内容的变化其高度也随着变化,首先先看下效果图: 然后我来介绍一下这个界面的总体架构,整个页面上放置一个tableView,下面的网页是tableView的footerview,中间规格所在的区域是一个cell上放置一个collectionView, 问题点1:商品规格可能有很多种,比如颜色.重量.也可能没有规格,所以中间的cell的高度是根据规格的多少而变化的,那么collectionView创建完成以后要怎么通知tableV

cell 高度自适应

在使用 table view 的时侯经常会遇到这样的需求:table view 的 cell 中的内容是动态的,导致在开发的时候不知道一个 cell 的高度具体是多少,所以需要提供一个计算 cell 高度的算法,在每次加载到这个 cell 的时候计算出 cell 真正的高度. 在 iOS 8 之前 没有使用 Autolayout 的情况下,需要实现 table view delegate 的 tableView(tableView: UITableView, heightForRowAtInde

iOS 8:【转】iOS 8 自适应 Cell

源地址:http://vit0.com/blog/2014/11/13/ios-8-zi-shi-ying-cell/ 在使用 table view 的时侯经常会遇到这样的需求:table view 的 cell 中的内容是动态的,导致在开发的时候不知道一个 cell 的高度具体是多少,所以需要提供一个计算 cell 高度的算法,在每次加载到这个 cell 的时候计算出 cell 真正的高度. 在 iOS 8 之前 没有使用 Autolayout 的情况下,需要实现 table view del