自定义单元格中的标签保持为零

时间:2013-09-06 23:32:54

标签: iphone ios objective-c uitableview

我创建了一个带有UILabel的自定义UITableViewCell。

在cellForRowAtIndexPath方法中,我初始化自定义单元格并为UILabel赋值。

当自定义单元格被加载时(单元格的高度高于默认单元格),我似乎无法给UILabel一个值。

SBDownloadCell.h

#import <UIKit/UIKit.h>

@interface SBDownloadCell : UITableViewCell

@property (weak, nonatomic) IBOutlet UILabel *title;
@property (weak, nonatomic) IBOutlet UIProgressView *progressbar;
@property (weak, nonatomic) IBOutlet UILabel *details;

- (IBAction)pause:(id)sender;

@end

SBDownloadCell.m

#import "SBDownloadCell.h"

@implementation SBDownloadCell

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
    }
    return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

- (IBAction)pause:(id)sender {
}
@end

SBViewController.m

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"SBDownload";

    SBDownloadCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil) {
        cell = [[SBDownloadCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }

    SBDownload *dwnld = [[SBDownload alloc] init];
    dwnld = [SBdownloads objectAtIndex:indexPath.row];

    //cell.title.text = [dwnld name];
    cell.title.text = @"Test";
    cell.progressbar.progress = [dwnld percentDone];
    cell.details.text = [NSString stringWithFormat:@"%f MB of %f MB completed, %@", [dwnld completed], [dwnld length], [dwnld eta]];

    return cell;
}

故事板

enter image description here

我在cell.title.text = @"Test";之后休息,这仍然是我所看到的:

enter image description here

它可能是什么?

注意:我使用Xcode DP-5和iOS7

4 个答案:

答案 0 :(得分:4)

我看到您的属性标有IBOutlet,这意味着您的表视图单元具有Interface Builder文件(xib或storyboard)。确保在Interface Builder中将正确的单元格标识符提供给表视图中的原型单元格。你不应该打电话给initWithStyle:。如果dequeueReusableCellWithIdentifier:在使用UITableViewController和故事板时返回nil,则表示设置不正确,因为dequeueReusableCellWithIdentifier:应始终返回一个单元格(如果必须,则会创建新单元格)。

为了进一步说明,在使用xib或故事板时,永远不会调用表格视图单元格initWithStyle:。加载nib时,正确的init方法为initWithCoder:

问题出在static NSString *simpleTableIdentifier = @"SBDownload";。在故事板中,您已将标识符设置为SBDownloadCell

答案 1 :(得分:0)

您需要分配UILabelUIProgressView。现在您为它们设置了属性,但在-initWithStyle方法中,您需要调用

之类的内容
self.title = [[UILabel alloc] initWithFrame:etc...];

如果您对SBDownloadCell上的每个属性执行此操作,则应正确分配标签。

答案 2 :(得分:0)

如果您在Storyboard中自定义原型单元格,则需要在storyboard中显示带有segue的TableViewController,或者如果需要通过编程呈现TableViewController,则需要使用instantiateViewControllerWithIdentifier:方法,

- (IBAction)showTableView:(id)sender
{
    UIStoryboard *storybaord = [UIStoryboard storyboardWithName:@"Main_iPad" bundle:nil];
    LJTableViewController *vc = (LJTableViewController*)[storybaord
                                                         instantiateViewControllerWithIdentifier:@"TableViewControllerID"];
    [self presentViewController:vc animated:YES completion:nil];
}

如果使用[TableViewContrller new]启动TableViewController,这将使你在tableView中获得一个nil标签:cellForRowAtIndexPath mehtod。

答案 3 :(得分:0)

我遇到同样的问题,但我的标识符对于在IBOutlets自定义标签中创建自定义单元格和显示数据是正确的,但在单元格分配后标签值为空。所以为此,我需要添加tableview方法来显示标签值

- (void)tableView:(UITableView *)tableView willDisplayCell:(DropViewTableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
  {
    cell.lblHSNCode.text = objClass.HSNCode;
  }