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

时间:2011-11-23 11:15:11

标签: iphone ios uitableview

从我的另一个问题; 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得到了:

enter image description here

enter image description here

enter image description here

从这里我有点卡住,我无法解决如何从我的ViewRoutes.m设置两个标签属性(它们最终会来自xml,但现在只是一个可变阵列)

我这样做是正确的吗?

汤姆

修改只是为了让您知道我现在正在将图片字符串加载到标签上,以后会是图片

4 个答案:

答案 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文件