UITableViewCell使用IB加载数据的自定义单元格

问题描述:

从我的其他问题; Using UITableViewCell in a UITableView我用IB创建了一个自定义单元格。继承人如何我的代码是目前:UITableViewCell使用IB加载数据的自定义单元格

ViewRoutes(原始表)

.h 

@interface ViewRoutes : UIViewController { 

    IBOutlet UITableView *tblRoute; 
} 

@property(nonatomic, retain) UITableView *tblRoute; 

@end 

.M

#import "ViewRoutes.h" 
#import "ViewRoutesCell.h" 

@implementation ViewRoutes 
@synthesize tblRoute; 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 


- (NSInteger) 
numberOfSectionsInTableView:(UITableView *)tableView { 
    return 1; 
} 


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return 1; 
} 


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

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell * aCell = [tableView dequeueReusableCellWithIdentifier:@"ViewRoutesCell"]; 
    if (aCell == nil) 
    { 


     NSArray *arr = [[NSBundle mainBundle] loadNibNamed:@"ViewRoutesCell" owner:self options:nil]; 

     for (NSObject *anObj in arr) { 

      if([anObj isKindOfClass:[UITableViewCell class]]) { 

       aCell = (UITableViewCell *)anObj; 


      } 
      return aCell; 
     } 
    } 


} 

和的.xib只是上有一个UITableView。

的ViewRoutesCell(我想成为自定义单元格是什么)

.H

#import <UIKit/UIKit.h> 

@interface ViewRoutesCell : UITableViewCell { 

    IBOutlet UITableViewCell *routesCell; 
    NSMutableArray *arryRouteText; 
    NSMutableArray *arryRouteImage; 

    IBOutlet UILabel *lblRouteText; 
    IBOutlet UILabel *lblRouteImage; 

} 

@property (nonatomic, retain) NSMutableArray *arryRouteText; 
@property (nonatomic, retain) NSMutableArray *arryRouteImage; 
@property (nonatomic, retain) UILabel *lblRouteText; 
@property (nonatomic, retain) UILabel *lblRouteImage; 

@end 

我已经在自定义单元格的.m做的唯一的事情是合成的物品

然后我的自定义单元格的xib我有:

enter image description here

enter image description here

enter image description here

从这里我得到一点点坚持,我不能工作了如何从我的ViewRoutes.m设定的两个标签属性(它们将从XML最终会到来,但是现在只要一个可变阵列)

我正在做这个正确的方法吗?

汤姆

编辑只是为了让你知道我加载图像串的标签就目前而言,将是一个图像后

+0

它是什么,你想做的事是什么呢?您是否尝试编辑自定义单元格的标签属性,或者您是否尝试编辑ViewRoutes.m文件的属性? – Warkst

+0

我试图从ViewRoutes.m编辑自定义单元格的标签属性 – TMB87

UITableViewCell * aCell = [tableView dequeueReusableCellWithIdentifier:@"ViewRoutesCell"]; 

你创建一个UITableViewCell对象的声明。这不知道您的自定义标签。你应该将其更改为:

ViewRoutesCell * aCell = (ViewRoutesCell *)[tableView dequeueReusableCellWithIdentifier:@"ViewRoutesCell"]; 

然后,if子句中,你应该改变

aCell = (UITableViewCell *)anObj; 

aCell = (ViewRoutesCell *)anObj; 

这将使编译器识别对象为之一您的特定单元格,允许您访问标签属性。

希望这会有所帮助!

+0

嘿,非常感谢!我们很亲密。还有一个问题,我如何让这些细胞将我设计的自定义细胞笔尖制作出来? http://screencast.com/t/TIw0WFbTxd例如是它是如何来的 – TMB87

+0

我不知道是什么原因造成这个......试试这个:在isKindOfClass调用中,写入ViewRoutesCell而不是UITableViewCell。如果这样不能解决问题并且无法解决问题,请查看本教程:http://www.icodeblog.com/2009/05/24/custom-uitableviewcell-using-interface-builder/。它有你需要的所有细节。祝你好运! – Warkst

如您有定义的UILabel属性,必须有@synthesized in ViewRoutesCell.m file。

现在,它很容易访问这些标签的属性。

在您的cellForRowAtIndexPath中,修改以下部分代码。

for (NSObject *anObj in arr) { 
    if([anObj isKindOfClass:[ViewRoutesCell class]]) { 
     aCell = (UITableViewCell *)anObj; 
     aCell.lblRouteText.text = @"My Route Text"; 
     aCell.lblRouteImage.text = @"My Route Image"; 
    } 
    return aCell; 
} 
+0

这是我的想法,但它没有公开属性让我访问lblRouteText或lblRouteImage。我已经在我的ViewRoutes.m中加载了.h,并在我的ViewRoutesCell.m – TMB87

+0

属性'lblRouteText'中找不到属性'UITableViewCell'类型的对象中合成的属性 – TMB87

+0

这是因为您不应将anObj强制转换为UITableViewCell *,而是转换为ViewRoutesCell *。 – Warkst

没有必要的for循环 通过正如你已经把return语句for循环下面的代码

acell.lblRouteText.text = [arryRouteText objectAtIndex:indexPath.row]; 
acell.lblRouteImage.text = [arryRouteImage objectAtIndex:indexPath.row]; 

return acell; 

取代你的for循环,它总是使用第一个对象,并且休息的对象永远不会有机会分配。

而且,您不能将图像分配给标签,因为您必须使用UIImageView。

+0

谢谢你,如上所述,虽然它不让我做aCell.lblRouteImage或aCell.lblRouteText,好像它们没有被暴露,但我确定它们应该是 – TMB87

+0

属性'lblRouteText'没有在'UITableViewCell'类型的对象上找到' – TMB87

+0

看来你还没有合成得当。 – HarshIT

你应该设置ViewRoutesCell类的IB细胞作为文件的所有者,然后你可以将这些属性链接到IB文件

+0

或 - (id)initWithCoder:(NSCoder *)coder {self_ [super initWithCoder:coder]; (self){__goodsImgView =(UIImageView *)[self subviewWithTag:1]; _eventImgView =(UIImageView *)[self subviewWithTag:2]; – TonnyTao