UITableView及其单元格在xib文件中

长话短说,我想创建一个XIB文件,其中包含:

  • 一个看法。 在这个视图中,它有很多东西和一个tableView。 (连接的数据源,委托给文件的所有者)。 该视图是XIB文件的主要视图。

  • 自定义单元格(用作tableView的原型单元格,因为XIB不支持原型tableView)。

  • 我怎么能达到这两个? 另外,我想知道同样适用于UICollectionView。

    我已经创建了这两个,将它加载到主视图(主视图在主要故事板中)。 但是tableView不按预期加载自定义单元格。 该单元格只是空白,看起来不像它在笔尖中设计的那样。

    编辑1

    以下是我如何将故事板注册到故事板中的主视图:

    - (UIView *)buildViewFromViewControllerClass:(Class)viewControllerClass
    {
        id viewController = [[viewControllerClass alloc] initWithNibName:NSStringFromClass(viewControllerClass) bundle:nil];
        [viewController view].frame = self.containerView.bounds;
    
        [self addChildViewController:viewController];
    
        return [viewController view];
    }
    

    我有很多viewController,所以我发现这是添加VC的最佳方式。

    在上面的描述中,我只是使用常规初始化:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        // init cell
        CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CustomCell"];
        if (!cell) {
            cell = [[PaymentCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CustomCell"];
        }
    
        return cell;
    }
    

    如果在视图中没有load方法,我将nib注册到tableView,它会在[tableView dequeueResuableCell...]崩溃。 注册码:

    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
    //    [self.tableView registerNib:[UINib nibWithNibName:self.nibName bundle:nil]
    //                forCellReuseIdentifier:@"CustomCell"];
    // I'm commenting it, because it caused crash.
    }
    

    崩溃消息:

    ***终止应用程序,由于未捕获异常'NSUnknownKeyException',原因:'[setValue:forUndefinedKey:]:此类不是密钥值编码兼容的关键tableView'。

    我在这里做错了什么? 下面是我设计笔尖的图片:

    模型

    如你所见,文件所有者的mainView连接到mainView ,它包含tableView。 customCell只是一个自定义设计的单元,在相同的文件(.m文件)中定义。


    你应该如下注册笔尖。

    [self.tableView registerNib:[UINib nibWithNibName:@"MyCell" bundle:nil] forCellReuseIdentifier:@"MyCell"]
    

    我一般都看到registerClass不加载视图,但只加载类。 我不知道为什么。

    另外一个.xib应该只包含一个视图。 所以你必须为UITableViewCellUITableView做出不同的处理。 背后的原因很简单。 每次加载xib时,都会创建xib中的所有视图。 每次创建单元格时都不需要新的表格。 对?

    至于你面临的崩溃。 该错误看起来像名称tableView有一个插座问题。 尝试删除插座并重新初始化它们

    附加

    对于UICollectionView你可以注册一个类,它会从xib载入你的视图。

     [self.collectinView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:cellIdentifier]
    

    更新

    如果您正在使用故事板,则可以添加两个原型单元格,并在tableview中添加两个单元格。 你可以在那里添加所有的视图,并给他们不同的类文件。 会减少你需要维护的xib文件的数量,也不需要注册你的nib。 这可能是一个教程

    链接地址: http://www.djcxy.com/p/86889.html

    上一篇: UITableView and its cell in a xib file

    下一篇: Typescript side