我创建了一个带有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;
}
故事板
我在cell.title.text = @"Test";
之后休息,这仍然是我所看到的:
它可能是什么?
注意:我使用Xcode DP-5和iOS7
答案 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)
您需要分配UILabel
和UIProgressView
。现在您为它们设置了属性,但在-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;
}