自定义 uitablecell 无法将表格单元连接到文件所有者

Posted

技术标签:

【中文标题】自定义 uitablecell 无法将表格单元连接到文件所有者【英文标题】:custom uitablecellcant connect tablecell to files owner 【发布时间】:2013-11-24 01:17:30 【问题描述】:

我可能找错了树,但我试图在更新到 ios7 的项目中复制我为 ios5 编写的功能。

我已经复制并粘贴了代码,我收到了这个错误

*** Assertion failure in -[UITableView dequeueReusableCellWithIdentifier:forIndexPath:], /SourceCache/UIKit/UIKit-2903.23/UITableView.m:5261
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unable to dequeue a cell with identifier TableView - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'
*** First throw call stack:
(0x30829f4b 0x3ac6a6af 0x30829e25 0x311d1fe3 0x3310891f 0x11bebf 0x330cea5b 0x33076e7d 0x33076699 0x32f9cda3 0x32c23c6b 0x32c1f47b 0x32c1f30d 0x32c1ed1f 0x32c1eb2f 0x32c1885d 0x307f51cd 0x307f2b71 0x307f2eb3 0x3075dc27 0x3075da0b 0x35484283 0x33001049 0x81597 0x7b558)

除了我检查 xib 时,一切都与另一个控制器相同

工作一:

崩溃一个:

不同之处在于没有引用插座 tableCell -> 文件的所有者

怎么样?为什么?

这是代码以防万一

Viewcontroller.h

#import <UIKit/UIKit.h>
#import "blogCellVC.h"

@interface BlogsListingiPhoneVC : UIViewController <UITableViewDataSource, UITableViewDelegate> 

    NSArray *blogsListing;
    UITableView *tableView;
    IBOutlet blogCellVC *tableCell;

Viewcontroller.m

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath


    static NSString *MyIndentifier = @"MyCell";

    blogCellVC *cell = (blogCellVC *)[self.tableView dequeueReusableCellWithIdentifier:MyIndentifier forIndexPath:indexPath];

    if (cell == nil)
    
        [[NSBundle mainBundle] loadNibNamed:@"blogCellVC" owner:self options:nil];
        cell = tableCell;
    

    blogsListingModel *info = [_blogsListing objectAtIndex:indexPath.row];


   if (info.blogActive == 0)
    
        [cell cellHead:info.blogName];
        [cell cellHeadCol:[UIColor lightGrayColor]];
        [cell cellIcon:@"blank.png"];

    else  
        [cell cellHead:info.blogName];
        [cell cellHeadCol:[UIColor blackColor]];
        [cell cellIcon:@"tick.png"];
    

    return cell;

Customcell.h

#import <UIKit/UIKit.h>

@interface blogCellVC : UITableViewCell 
    IBOutlet UILabel *cellHead;
    IBOutlet UIImageView *cellIcon;


- (void)cellHead:(NSString *)_text;
- (void)cellIcon:(NSString *)_text;
- (void)cellHeadCol:(UIColor *)aCol;

@end

Customcell.m

#import "blogCellVC.h"

@interface blogCellVC ()

@end

@implementation blogCellVC

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 

    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) 
        // Initialization code.
    
    return self;




- (void)cellHead:(NSString *)_text 
    cellHead.text = _text;


- (void)cellHeadCol:(UIColor *)aCol 
    cellHead.textColor = aCol;
    //cellStandfirst.textColor = aCol;


- (void)cellIcon:(NSString *)_text 
    cellIcon.image = [UIImage imageNamed:_text];


- (void)dealloc 
    [super dealloc];



@end

PS。我已将身份检查器中文件所有者的自定义类设置为“blogCellVC”,并将属性检查器中的标识符设置为“MyCell”

【问题讨论】:

我在这里找到了一个解决方案:***.com/questions/17875353/… 但它仍然没有解释为什么它在一个地方而不是另一个地方工作...... 【参考方案1】:

我在这里找到了解决方案:

No Visible View in Custom Table View Cell

在自定义的 uitableviewcell 中,在身份检查器中将文件所有者的类分配为带有表格的视图,并用您的自定义类覆盖 uitableview 单元格

我的错误是尝试在第二个视图中重用自定义类。

为了完整起见,最少的代码

父.h

#import "blogCellVC.h"

@interface BlogsListingiPhoneVC : UIViewController <UITableViewDataSource, UITableViewDelegate> 

    UITableView *tableView;
    IBOutlet blogCellVC *tableCell;

父.m

- (void)viewDidLoad

    [super viewDidLoad];
    [tableView registerClass: [blogCellVC class] forCellReuseIdentifier:@"MyCell"];


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath


    static NSString *MyIndentifier = @"MyCell";

    blogCellVC *cell = (blogCellVC *)[self.tableView dequeueReusableCellWithIdentifier:MyIndentifier forIndexPath:indexPath];

    if (cell == nil)
    
        cell = [[blogCellVC alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MyCell"];    
    

    [cell cellHead:info.blogName];
    [cell cellHeadCol:[UIColor lightGrayColor]];
    [cell cellIcon:@"blank.png"];
    return cell;

blogCellVC.h

#import <UIKit/UIKit.h>

@interface blogCellVC : UITableViewCell 
    IBOutlet UILabel *cellHead;
    IBOutlet UIImageView *cellIcon;


- (void)cellHead:(NSString *)_text;
- (void)cellIcon:(NSString *)_text;
- (void)cellHeadCol:(UIColor *)aCol;

@end

blogCellVC.m

@interface blogCellVC ()

@end

@implementation blogCellVC

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 

    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) 
        // Initialization code.
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"blogCellVC" owner:self options:nil];
        self = [nib objectAtIndex:0];
    
    return self;

最后确保在 xib/storyboard 中您已将“MyCell”或其他任何内容放在属性检查器的标识符字段中。

这适用于 X Code 5,ios7

【讨论】:

以上是关于自定义 uitablecell 无法将表格单元连接到文件所有者的主要内容,如果未能解决你的问题,请参考以下文章

如何将 UIViewController 实例传递给自定义 UITableCell

聚焦自定义 UITableCell 时移除细边框

如何为具有与内置单元格相同的布局指标的“UITableView”提供自定义“UITableCell”?

Uilabel 和一个表格单元

ios swift自定义uitablecell如何放置多个项目(标签,图像)

在自定义 UITableCell 中从 UITextField 调用 textFieldShouldReturn 时遇到问题