我在尝试让自定义 UITableViewCell 显示任何自定义标签/控件时遇到重大问题。我有一个使用相同代码的类似项目,它运行良好......唯一的区别是我在 UITableViewController 中使用表格单元格,而不是在问题页面中使用嵌入在 UIViewController 中的 UITableView 中的表格单元格。. 对 stackoverflow 的一些搜索提出了以下问题,所有这些问题我都已正确设置:
1) tableView:cellForRowAtIndexPath: 中的 CellIdentifier: 匹配故事板标识符
2) 所有 IBOutlets 都正确连接
我怀疑这可能与我加载页面的方式有关(我在 viewDidLayoutSubviews 方法中做了很多页面加载,因为我使用故事板自动布局,所以我需要访问 viewDidLoad 中不可用的帧大小等)
有什么建议么?
安迪
编辑:顺便说一句,如果我使用标准 UITableViewCell 而不是我的自定义标签,它可以完美地使用 cell.textLabel.text = @"..." 等。这似乎与我的自定义单元格有关。
视图控制器.h
@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
@property (nonatomic, weak) IBOutlet UITableView *tableView;
@property (weak, nonatomic) IBOutlet UIView *flipContainerView;
...
@end
视图控制器.m
@implementation ViewController
@synthesize tableView = _tableView;
@synthesize flipContainerView = _flipContainerView;
...
- (void)viewDidLayoutSubviews {
self.tableView.frame = CGRectMake((self.flipContainerView.frame.size.width / 2) - (self.flipContainerView.frame.size.width / 2),
(self.flipContainerView.frame.size.height / 2) - (self.flipContainerView.frame.size.height / 2),
self.flipContainerView.frame.size.width,
self.flipContainerView.frame.size.height);
...
[self.tableView reloadData];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"List Cell";
ListCell *cell = (ListCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
if (cell == nil) {
cell = [[ListCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
cell.testLabel.text = nil;
cell.testLabel.text = @"test value";
return cell;
}
列表细胞.h
@interface ListCell : UITableViewCell
@property (nonatomic, weak) IBOutlet UILabel *testLabel;
@end
列表细胞.m
#import "ListCell.h"
@implementation ListCell
@synthesize testLabel = _testLabel;
- (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
}
@end