从我的另一个问题; Using UITableViewCell in a UITableView我使用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,但现在只是一个可变阵列)
我这样做是正确的吗?
汤姆
修改只是为了让您知道我现在正在将图片字符串加载到标签上,以后会是图片
答案 0 :(得分:3)
在
的声明中UITableViewCell * aCell = [tableView dequeueReusableCellWithIdentifier:@"ViewRoutesCell"];
你正在创建一个UITableViewCell
对象。这不知道您的自定义标签。你应该把它改成:
ViewRoutesCell * aCell = (ViewRoutesCell *)[tableView dequeueReusableCellWithIdentifier:@"ViewRoutesCell"];
然后,在if
子句中,您应该更改
aCell = (UITableViewCell *)anObj;
到
aCell = (ViewRoutesCell *)anObj;
这将使编译器将对象识别为您的特定单元格之一,从而允许您访问标签属性。
希望这有帮助!
答案 1 :(得分:0)
由于您已为UILabel定义属性,因此您必须在 ViewRoutesCell.m 文件中包含 @synthesized 。
现在,它可以轻松访问这些标签的属性。
在 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;
}
答案 2 :(得分:0)
不需要循环 通过以下代码替换你的for循环
acell.lblRouteText.text = [arryRouteText objectAtIndex:indexPath.row];
acell.lblRouteImage.text = [arryRouteImage objectAtIndex:indexPath.row];
return acell;
正如您已将return语句放在For循环中一样,它将始终使用第一个对象,其余的对象永远不会有机会被分配。
并且,您无法将图像分配给标签,因为您必须使用UIImageView。
答案 3 :(得分:0)
您应该将ViewRoutesCell类设置为IB单元格作为文件的所有者,然后您可以将这些属性链接到IB文件