【xib】加载的一些问题,以UICollectionView 为例

xib 用不好在开发中很容易制造各种crash,issue像

1.[CUINamedImage collectionView:numberOfItemsInSection:]: unrecognized selector sent to instance 0x8c9a6d02.*** Assertion failure in -[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:]3.[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:viewCategory:]

我想在一个ViewController中自定义一个View,这个View是collectionview

//.h文件
@interface ImageCollectionView : UICollectionView<UICollectionViewDataSource,UICollectionViewDelegate>
@property (weak, nonatomic) IBOutlet UICollectionView *imageCollection;
+(ImageCollectionView *)instanceTextView;
@end

//.m文件
#import "ImageCollectionView.h"
#import "ImageCollectionViewCell.h"

@implementation ImageCollectionView
+(ImageCollectionView *)instanceTextView
{
    NSArray* nibView =  [[NSBundle mainBundle] loadNibNamed:@"ImageCollectionView" owner:nil options:nil];
    return [nibView objectAtIndex:0];
}
-(id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if(self)
    {
    }
    return self;
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    return 12;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    static NSString * CellIdentifier = @"CustomCollectCell";

    [_imageCollection registerNib:[UINib nibWithNibName:@"ImageCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:CellIdentifier];
    ImageCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];

    return cell;

}

//ImageCollectionViewCell 就不写了

  

在看xib

在image Collection View 中inspector 继承ImageCollectionView,

在collection View 中outlets 连image Collection View而不是File‘s owner (一般自带xib的控制器都是连File‘s owner)

上面是用xib自定义一个collectionView 的例子。

再看看 创建一个自带xib的ControllerView的情况:

File‘s owner 中custom class 是绑定控制器类AddGoodsController的,连一些协议也就是连 File‘s owner 。

所以,

1.绑定谁,谁就是self,可以在类中self.

2.用xib 自定义view 出现上面的问题基本就是绑定关系的问题

3.xib技巧介绍

时间: 2024-10-08 22:05:04

【xib】加载的一些问题,以UICollectionView 为例的相关文章

xib加载局部UIView

xib文件是轻量级的,一般用来描述某一块局部的UI界面,而storyboard是用来描述软件的许多界面,并且能展示多个页面之间的跳转关系 1.xib文件的加载方式 方法1. NSArray *objs = [[NSBundle mainBundle] loadNibNamed:@"MJAppView" owner:nil options:nil]; 这个方法会创建xib中的所有对象,并且将对象按顺序放到objs数组中 (如果xib如右图所示,那么objs数组中依次会有3个对象:1个UI

UINib xib加载

1.加载RowView.xib文件,创建Objects下面的所有控件: NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"RowView" owner:nil options:nil]; 2.取出xib中的第一个子控件: UIView *rowView = views[0]; 3.tableview中cell NSString *identify = @"goodslistcell"; cell = [ta

Bug:(使用xib加载控制器view时遇到的bug) loaded some nib but the view outlet was not set

当使用 initWithNibName 函数, 并使用 由nib文件生成的ViewController 的view属性时候,遇到这个问题. UIViewController * UIVC = [[UIViewController alloc] initWithNibName:@"loc" bundle:nil]; [self.view addSubview:UIVC.view]; NibName[2203:207] *** Terminating app due to uncaught

IOS第八天(1:UITableViewController团购,点击底部,xib加载更多, 代理模式)

******* HMViewController.h #import "HMViewController.h" #import "HMTg.h" #import "HMTgCell.h" #import "HMTgFooterView.h" @interface HMViewController () <HMTgFooterViewDelegate> @property (nonatomic, strong) NS

xcode xib 加载 、注意点

加载xib2中方式 NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"xib名称" owner:nil options:nil]; UINib *nib = [UINib nibWithNibName:@"xib名称" bundle:nil]; // nil 默认是mainBundle NSArray *array = [nib instantiteWithOwer:nil object:nil]; xib

xib加载

//aDecoder解析器,将xib解析出来,可以通过alloc.initWithCoder的方法将xib文件加载出来,这个方法比awakeFromNib先调用 -(instancetype)initWithCoder:(NSCoder *)aDecoder{ self = [super initWithCoder:aDecoder]; if (self) { } return self; } -(void)awakeFromNib{ }

XIB加载 ---- [UIViewController _loadViewFromNibNamed:bundle:] loaded the &quot;QuestionAndAnswerController&quot; nib but the view outlet was not set

  问题: *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "QuestionAndAnswerController" nib but the view outlet was not set.'    新创建一个ViewControl

通过Xib加载控制器的View

1.创建窗口self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];2.设置窗口根控制器2.1从XIB当中加载控制器.MyViewController *vc = [[MyViewController alloc] initWithNibName:@"VC" bundle:nil];self.window.rootViewController = vc;3.显示窗口[self.window

xib加载的两种方式

•Xib文件的加载 Ø方法1 NSArray *objs = [[NSBundle mainBundle] loadNibNamed:@"AppView" owner:nil options:nil]; 这个方法会创建xib中的所有对象,并且将对象按顺序放到objs数组中 (如果xib如右图所示,那么objs数组中依次会有3个对象:1个UIView.1个UIButton.1个UISwitch) Ø方法2 bundle参数可以为nil,默认就是main bundle UINib *nib

IOS开发——UI进阶篇(八)pickerView简单使用,通过storyboard加载控制器,注册界面,通过xib创建控制器,控制器的view创建,导航控制器的基本使用

一.pickerView简单使用 1.UIPickerViewDataSource 这两个方法必须实现 // 返回有多少列 - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView; // 返回第component有多少行 - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;