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我有:
从这里我得到一点点坚持,我不能工作了如何从我的ViewRoutes.m设定的两个标签属性(它们将从XML最终会到来,但是现在只要一个可变阵列)
我正在做这个正确的方法吗?
汤姆
编辑只是为了让你知道我加载图像串的标签就目前而言,将是一个图像后
在
UITableViewCell * aCell = [tableView dequeueReusableCellWithIdentifier:@"ViewRoutesCell"];
你创建一个UITableViewCell
对象的声明。这不知道您的自定义标签。你应该将其更改为:
ViewRoutesCell * aCell = (ViewRoutesCell *)[tableView dequeueReusableCellWithIdentifier:@"ViewRoutesCell"];
然后,if
子句中,你应该改变
aCell = (UITableViewCell *)anObj;
到
aCell = (ViewRoutesCell *)anObj;
这将使编译器识别对象为之一您的特定单元格,允许您访问标签属性。
希望这会有所帮助!
嘿,非常感谢!我们很亲密。还有一个问题,我如何让这些细胞将我设计的自定义细胞笔尖制作出来? http://screencast.com/t/TIw0WFbTxd例如是它是如何来的 – TMB87
我不知道是什么原因造成这个......试试这个:在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;
}
没有必要的for循环 通过正如你已经把return语句for循环下面的代码
acell.lblRouteText.text = [arryRouteText objectAtIndex:indexPath.row];
acell.lblRouteImage.text = [arryRouteImage objectAtIndex:indexPath.row];
return acell;
取代你的for循环,它总是使用第一个对象,并且休息的对象永远不会有机会分配。
而且,您不能将图像分配给标签,因为您必须使用UIImageView。
你应该设置ViewRoutesCell类的IB细胞作为文件的所有者,然后你可以将这些属性链接到IB文件
或 - (id)initWithCoder:(NSCoder *)coder {self_ [super initWithCoder:coder]; (self){__goodsImgView =(UIImageView *)[self subviewWithTag:1]; _eventImgView =(UIImageView *)[self subviewWithTag:2]; – TonnyTao
它是什么,你想做的事是什么呢?您是否尝试编辑自定义单元格的标签属性,或者您是否尝试编辑ViewRoutes.m文件的属性? – Warkst
我试图从ViewRoutes.m编辑自定义单元格的标签属性 – TMB87