自定义 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
如何为具有与内置单元格相同的布局指标的“UITableView”提供自定义“UITableCell”?
ios swift自定义uitablecell如何放置多个项目(标签,图像)
在自定义 UITableCell 中从 UITextField 调用 textFieldShouldReturn 时遇到问题