我看到网上有很多关于这个问题的资源。我必须为我的单元格加载不同的XIB(UIViewContoller
)文件。我设计了我的单元格,我希望在我的单元格中加载该设计。
我写了这段代码,但我得到了一个例外。
-[UIView setTableViewStyle:]: unrecognized selector sent to instance 0x6040de0
2011-07-11 14:42:27.461 TableViewTest[2776:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView setTableViewStyle:]: unrecognized selector sent to instance 0x6040de0'
这是我的加载nib文件的代码
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
// Load the top-level objects from the custom cell XIB.
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"loadXibfile" owner:self options:nil];
// Grab a pointer to the first object (presumably the custom cell, as that's all the XIB should contain).
cell = [topLevelObjects objectAtIndex:0];
}
return cell;
答案 0 :(得分:14)
您应该在XIB文件中使用UITableViewCell
而不是UIView
。
答案 1 :(得分:2)
这是解决方案,它对我和家庭来说对你或其他人都有用。
cell = [[[YourCustomcell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell"] autorelease];
NSArray *toplavelobject=[[NSBundle mainBundle]loadNibNamed:@"YourCustomcell" owner:self options:nil];
for(id c in toplavelobject)
{
if ([c isKindOfClass:[UITableViewCell class]])
{
cell=(YourCustomcell *) c;
break;
}
}
答案 2 :(得分:1)
虽然不是你问题的直接答案,但我建议你使用这个UITableViewCellFactory类,它非常方便:
http://blog.carbonfive.com/2009/07/16/loading-uitableviewcells-from-a-nib-file/
答案 3 :(得分:1)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
NSString *CellIdentifier = [NSString stringWithFormat:@"Cell%d",indexPath.row];
LatestNewsCell *cell = (LatestNewsCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[NSBundle mainBundle] loadNibNamed:@"LatestNewsCell" owner:self options:nil] objectAtIndex:0];
}
}
答案 4 :(得分:0)
这就是我所做的。再一些技术很尴尬,我需要改进。
首先,我创建了一个UITableViewCell的新子类。问题是我没有选择“include”xib。就像xib仅用于UIViewcontroller一样。我想您可以使用XIB创建UIViewController的子类,然后创建UITableViewCell的另一个子类,并将模板移动到UIViewController的子类。
作品。
然后我把这些功能:
@implementation BGCRBusinessForDisplay2
- (NSString *) reuseIdentifier {
return [[self class] reuseIdentifier];
};
+ (NSString *) reuseIdentifier {
return NSStringFromClass([self class]);
};
初始化我做:
- (BGCRBusinessForDisplay2 *) initWithBiz: (Business *) biz
{
if (self.biz == nil) //First time set up
{
self = [super init]; //If use dequeueReusableCellWithIdentifier then I shouldn't change the address self points to right
NSString * className = NSStringFromClass([self class]);
PO (className);
[[NSBundle mainBundle] loadNibNamed:className owner:self options:nil];
[self addSubview:self.view]; //What is this for? self.view is of type BGCRBusinessForDisplay2. That view should be self, not one of it's subview Things don't work without it though
}
if (biz==nil)
{
return self; //Useful if we only want to know the height of the cell
}
self.biz = biz;
self.Title.text = biz.Title; //Let's set this one thing first
self.Address.text=biz.ShortenedAddress;
[self addSubview:self.view];
有点尴尬。这是其他人说我应该做的事情,没有它就行不通。实际上我希望self.view是自我,而不是自我的子视图。但是hei ......不知道该怎么办。
...
然后我为cellForRowAtIndexPath实现这个
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
//[FetchClass singleton].FetchController
if([BGMDCRFetchClass singleton].FetchController.fetchedObjects.count!=0){
BGCRBusinessForDisplay2 *cell = (BGCRBusinessForDisplay2*)[tableView dequeueReusableCellWithIdentifier:[BGCRBusinessForDisplay2 reuseIdentifier]];
if (cell == nil)
{
cell =[BGCRBusinessForDisplay2 alloc];
}
else{
while (false);
}
Business * theBiz=[[BGMDCRFetchClass singleton].FetchController objectAtIndexPath:indexPath];
cell = [cell initWithBiz:theBiz];
return cell;
//return theBiz.CustomCell;
}else{
UITableViewCell * tvc=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"tvc"];
return tvc;
}
}
请注意,我将alloc与init分开。那有点尴尬。这就是为什么在我的 - (BGCRBusinessForDisplay2 *) initWithBiz: (Business *) biz
中,如果之前已经初始化了一个单元格,我根本就不执行init的上半部分。我只是将Business *的值分配给BGCRBusinessForDisplay2中的各个插座。
我有人可以改善我的答案,欢迎他们。到目前为止它的作用。