gpt4 book ai didi

ios - 没有 dequeueReusableCellWithIdentifier 的自定义 UITableViewCell

转载 作者:行者123 更新时间:2023-12-01 18:47:32 33 4
gpt4 key购买 nike

所以我有一个自定义的 UITableViewCell:

TestTableViewCell.h

#import <UIKit/UIKit.h>

@interface TestTableViewCell : UITableViewCell

@property (strong, nonatomic) IBOutlet UILabel *testCellLabel;

@end

TestTabelViewCell.m
#import "TestTableViewCell.h"

@implementation TestTableViewCell

-(id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
_testCellLabel = [[UILabel alloc] init];
}

return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];

// Configure the view for the selected state
}

@end

然后我有一个带有使用自定义表格 View 单元格的表格 View 的 View Controller 。但是这个问题是我不想在 cellForRowAtIndexPath 中使用 dequeueReusableCellWithIdentifier。相反,我想要一个单元格数组。

ViewController.h
#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>

@end

ViewController.m
#import "ViewController.h"
#import "TestTableViewCell.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UITableView *tableView;
@property (strong, nonatomic) NSArray *myTableViewCells;

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

- (NSArray *)myTableViewCells {
TestTableViewCell *cell1 = [[TestTableViewCell alloc] init];
cell1.testCellLabel.text = @"one";
cell1.backgroundColor = [UIColor blueColor];

TestTableViewCell *cell2 = [[TestTableViewCell alloc] init];
cell2.testCellLabel.text = @"two";
cell1.backgroundColor = [UIColor greenColor];

if (!_myTableViewCells) {
_myTableViewCells = @[cell1, cell2];
}

return _myTableViewCells;
}

#pragma mark - UITableView delegate functions

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.myTableViewCells.count;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
TestTableViewCell *cell = self.myTableViewCells[indexPath.row];
return cell;
}

@end

问题是没有 testCellLabel出现在表格 View 单元格中。我知道细胞在那里,因为我设置了它们的背景颜色。

与几个人交谈后,显然我需要从 XIB 或 NIB 进行某种加载,以便 UI 正确加载?即使标签是在 Storyboard 的单元格中定义的。

我知道这违反了规范,Apple 确实希望您使用 dequeueReusableCellWithIdentifier,但我知道它在我需要它的情况下不起作用。我已经阅读了这么多 不要只是告诉我使用它。这个代码示例只是非常基本的,例如起见和易用性。

任何帮助将不胜感激。

最佳答案

 TestTableViewCell *cell1 = [[TestTableViewCell alloc] init];

创建一个新的 TestTableViewCell对象并且不会像您认为的那样从 Storyboard 中实例化它。因此,所有创建的网点都将为零,根本不会出现。您可以设置背景颜色这一事实并不能证明您的实现有效。

您需要使用 dequeueReusableCellWithIdentifier .你说它对你的问题不起作用..告诉我它是如何不起作用的,我会告诉你为什么你错了。

编辑

我在您的评论中看到您说您的单元格需要自定义 setter 。好吧,当你使用 dequeueReusableCellWithIdentifier您可以在 awakeFromNib 中完成所有设置工作(如果使用 xib 文件)或 initWithCoder如果您正在使用 Storyboard 。

关于ios - 没有 dequeueReusableCellWithIdentifier 的自定义 UITableViewCell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34184336/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com