iOS开发攻城狮的集散地首页投稿(暂停使用,暂停投稿)iOS Developer

ios - 纯代码创建collectionViewControl

2016-05-12  本文已影响5976人  AlexPei
Snip20160512_8.png Snip20160512_9.png Snip20160512_10.png

#import "AppDelegate.h"
#import "PBViewController.h"

#define kScreenW [UIScreen mainScreen].bounds.size.width
#define kScreenH [UIScreen mainScreen].bounds.size.height
#define kScreenB [UIScreen mainScreen].bounds
@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    self.window = [[UIWindow alloc] initWithFrame:kScreenB];
    
    /** 
     1.此处设置window的背景色为白色 
     2.如果有多个控制器的话,不用一一给每个控制器设置背景色.
     3.此行代码在此并不管用.原因是collectionVIew把window给糊住了看下图 以及解释
     */
    self.window.backgroundColor = [UIColor whiteColor];
    
    /** 设置window的根控制器 */
    PBViewController * rootVc = [[PBViewController alloc] init];
    self.window.rootViewController = rootVc;
    
    [self.window makeKeyAndVisible];
    return YES;
}

Snip20160512_11.png

/** 控制器初始化的同时设置布局参数给collectionView */
-(instancetype)init{

    /** 创建布局参数 */
    UICollectionViewFlowLayout * flowLayout = [[UICollectionViewFlowLayout alloc] init];
    flowLayout.itemSize = CGSizeMake(30, 40);
    
    /** 
     1.创建collectionView 
     2.设置布局参数
     */
    self.collectionView = [[UICollectionView alloc] initWithFrame:[UIScreen mainScreen].bounds collectionViewLayout:flowLayout];
    
    /** 注册cell可重用ID */
    [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:reuseIdentifier];
    
    /** 
     1.设置背景色 
     2.由于糊上了一层collectionView所以在Appdelegate中设置window的背景色被collectionView覆盖.此时collectionView的颜色要重新设置
     */
    self.collectionView.backgroundColor = [UIColor whiteColor];
    
    return self;
}

Snip20160512_12.png Snip20160512_13.png Snip20160512_14.png

/**
 1.后于init方法调用
 2.可以在此注册cell可重用ID.
 3.建议在init里面创建或者初始化一些视图控件之类操作
 */
-(void)viewWillAppear:(BOOL)animated{

    NSLog(@"%s",__func__);
}


/** 方法不会被调用,所以注册cell的方法要写在init中 */
- (void)viewDidLoad {
    [super viewDidLoad];

    [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:reuseIdentifier];
}

注意点:

1. 创建控制的同时要设置布局参数.
2. self.collectionView也要重新创建.
3. 必须重新注册cell的可重用ID否则崩溃.
4. 调试技巧:看调用堆栈:找抛出异常的方法 [NSException raise]....,在这个方法的前面执行了那个方法,就是抛出异常的根源.再结合reason里面的原因,快速定位错误位置,达到快速解决bug目的.
上一篇 下一篇

猜你喜欢

热点阅读