UITableViewCell的自定义代码

时间:2012-10-27 22:29:49

标签: ios ios5 uitableview

我想知道在哪里输入自定义代码来更改UITableViewCell的Label属性的值。

我不确定如何加载它,因为我在ViewDidLoad和(id)initWithStyle实例方法中放了一个NSLog,但都没有写入日志。

我已经设置了所有正确链接的NIB和自定义类,并且Label作为属性链接,不再导致错误。但是我无法设置文本。

这是自定义单元格的调用方式:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
LeftMenuTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {

    NSArray* views = [[NSBundle mainBundle] loadNibNamed:@"LeftMenuTableViewCell" owner:nil options:nil];

    for (UIView *view in views) {
        if([view isKindOfClass:[UITableViewCell class]])
        {
            cell = (LeftMenuTableViewCell*)view;

        }
    }
}

return cell;
}

这是LeftMenuViewCell类的IMP文件中的代码。

-(void)viewDidLoad {

displayName.text = [self.user objectForKey:@"displayName"];

我可以将displayName设置为字符串,但这也不会改变。如果我为自定义单元格类的viewDidLoad添加了一个NSLog,它没有显示,就像没有加载一样,但是单元格被加载了......?

3 个答案:

答案 0 :(得分:1)

如果没有代码细节,我只能给出一个模糊的回答。

您的自定义单元格需要子类UITableViewCell,并且您需要在数据源方法tableView:cellForRowAtIndexPath:时为您的表提供此自定义子类。

我建议您阅读如何在UITableView s中添加/使用单元格: http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/TableView_iPhone/TableViewCells/TableViewCells.html#//apple_ref/doc/uid/TP40007451-CH7-SW1

答案 1 :(得分:0)

例如

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


 RouteCell *routeCell = [self.tableView dequeueReusableCellWithIdentifier:routeIdentifier];

if (routeCell == nil) {
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"RouteCell" owner:nil options:nil];
    routeCell = [nib objectAtIndex:0];
}

routeCell.travelTime.text = @"Here you are setting text to your label";

return routeCell;

答案 2 :(得分:0)

假设您使用名为testLabel的UILabel定制了UITableViewCell。如果您的NIB和自定义类链接正确,则可以使用以下代码:

MyTableViewCell.h

@interface MyTableViewCell : UITableViewCell

@property (nonatomic, assign) IBOutlet UILabel *testLabel;

@end
UITableViewController或UIViewController中的

cellForRowAtIndexPath:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
      static NSString *CellIdentifier = @"MyTableViewCellId";
      MyTableViewCell *cell = (MyTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

      if (cell == nil) {
          NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"MyTableViewCell" owner:self options:nil];
         cell = [topLevelObjects objectAtIndex:0];    
      }

      [cell.testLabel.text = [_dataSource objectAtIndex:[indexPath row]]];

      return cell;
}

希望有所帮助:)