iOS - UILabel加载,但没有文本显示

Zho*_*ter 4 iphone objective-c uitableview ios

我已经实现了自己的UITableViewCell.xib为它创建了一个.我已使用强大的方法连接所有标签,IBOutletUILabelsawakeFromNib()方法中初始化.但是,每当我运行的iOS模拟器,我碰到一个问题,即UILabel(null)NSLog.

我想知道它是否与我在UILabel的文本中加载的方式有关.我试图创建一个缩短版本的项目,概述了我遇到的问题.

我还要注意,我可以点击实际的行,但仍然没有显示文本.

我的代码:

ToDoCell.h

#import <UIKit/UIKit.h>

@interface ToDoCell : UITableViewCell
@property (strong, nonatomic) IBOutlet UILabel *minutesLeft;
@property (strong, nonatomic) IBOutlet UILabel *hoursLeft;
@property (strong, nonatomic) IBOutlet UILabel *daysLeft;
@property (strong, nonatomic) IBOutlet UILabel *taskLabel;

@end
Run Code Online (Sandbox Code Playgroud)

ToDoCell.m

#import "ToDoCell.h"

@implementation ToDoCell

@end
Run Code Online (Sandbox Code Playgroud)

ToDoViewController.m

#import "ToDoViewController.h"
#import "ToDoCell.h"

@interface ToDoViewController ()

@property NSMutableArray *toDoItems;

@end

@implementation ToDoViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.toDoItems = [[NSMutableArray alloc] init];
    [self loadInitialData];
}

- (void)loadInitialData {
    NSString *item1 = @"Testing";
    [self.toDoItems addObject:item1];
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // Return the number of sections.
    return 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    ToDoCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ToDoCell" forIndexPath:indexPath];

    cell.taskLabel.text = @"Testing";
    NSLog(@"Fudge Monkeys: %@", cell.taskLabel.text);

    return cell;
}

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView deselectRowAtIndexPath:indexPath animated:NO];
    [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
}

@end
Run Code Online (Sandbox Code Playgroud)

Adn*_*tab 5

问题是您正在为标签创建新对象,但是您没有将它们添加到[self addSubview:label]superview,但是调用它们将它们添加到属性不会将它们添加到超级视图.

但这完全没必要,你不应该初始化它们awakeNib.现在你不再需要使用@ synthesis了,我还会说你的代码.您使IBOutlets强大的任何特殊原因?

更新你需要注册nib,tableView首先添加以下行viewDidLoad

[tableView registerNib:[UINib nibWithNibName:@"ToDoCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"ToDoCell"];
Run Code Online (Sandbox Code Playgroud)

你可以在这里阅读更多相关信息

  • 当你在nib中定义一个单元格时,那么在decqueue之前你必须用tableView注册那个nib,如果它第一次自动创建一个对象就会出列,否则你必须创建单元格和你自己. (2认同)
  • 它告诉你的tableview它应该从一个nib文件加载它的单元格,并且单元格标识符将是"ToDoCell". (2认同)