我正在使用界面生成器创建自己的自定义 UITableViewCell。我支持 iOS 5 和 iOS 6,但我不想使用 Storyboard。请不要建议情节提要。我坚持使用 Interface Builder 并以编程方式编写。
我创建了一个子类 UITableViewCell 的类。这是.h文件:
@interface CategoryCell : UITableViewCell
{
__weak IBOutlet UIImageView *image;
__weak IBOutlet UILabel *name;
__weak IBOutlet UILabel *distance;
__weak IBOutlet UILabel *number;
__weak IBOutlet UIImageView *rating;
}
@property (nonatomic, weak) IBOutlet UIImageView *image;
@property (nonatomic, weak) IBOutlet UILabel *name;
@property (nonatomic, weak) IBOutlet UILabel *distance;
@property (nonatomic, weak) IBOutlet UILabel *number;
@property (nonatomic, weak) IBOutlet UIImageView *rating;
@end
XIB 文件的类型为 UIViewController,并具有 CategoryCell 类型的视图。我按需要连接了插座。
问题
dequeueResuableCellWithIdentifier
没有调用自定义单元格。这是我所拥有的:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"CategoryCell";
CategoryCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CategoryCell" owner:self options:nil];
cell = [topLevelObjects objectAtIndex:0];
.....
}
return cell
}
当我loadBundle
用: 替换该行时cell = [[CategoryCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
,它确实有效。但是笔尖没有加载。所以加载了一个单元格,但不是我自己的单元格,所以我无法设置我想要的标签和图像。添加常规加载捆绑线(如上例所示)并init
为自定义单元格的方法设置断点时,它不会被调用。此外,我得到的是一个全白屏幕,它覆盖了模拟器中的整个 iPhone 屏幕。
为什么会这样?我在这里做错了什么?当我尝试将插座设置为strong
(我知道我不应该这样做)时,它也不起作用。
编辑:
我通过将 NSBundle 行替换为:
UIViewController *temporaryController = [[UIViewController alloc] initWithNibName:@"CategoryCell" bundle:nil];
cell = (CategoryCell *)temporaryController.view;
我对 NSBundle 方法做错了什么?据说这应该是“更简单”的方法。