Zho*_*ter 4 iphone objective-c uitableview ios
我已经实现了自己的UITableViewCell并.xib为它创建了一个.我已使用强大的方法连接所有标签,IBOutlet并UILabels在awakeFromNib()方法中初始化.但是,每当我运行的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)
问题是您正在为标签创建新对象,但是您没有将它们添加到[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)
你可以在这里阅读更多相关信息
| 归档时间: |
|
| 查看次数: |
400 次 |
| 最近记录: |