gpt4 book ai didi

uitableview - 使用 iOS 6 UITableView dequeueReusableCellWithIdentifier 时设置 UITableViewCell 的样式 :forIndexPath:

转载 作者:行者123 更新时间:2023-12-03 05:11:56 27 4
gpt4 key购买 nike

我正在尝试弄清楚在 iOS 6 中使用 UITableView 的新方法时如何设置 UITableViewCellStyle

以前,在创建 UITableViewCell 时,我会更改 UITableViewCellStyle 枚举,以在调用 initWithStyle: 时创建不同类型的默认单元格,但是从什么开始我可以推断,情况不再是这样了。

UITableView 的 Apple 文档指出:

Return Value: A UITableViewCell object with the associated reuse identifier. This method always returns a valid cell.

Discussion: For performance reasons, a table view's data source should generally reuse UITableViewCell objects when it assigns cells to rows in its tableView:cellForRowAtIndexPath: method. A table view maintains a queue or list of UITableViewCell objects that the data source has marked for reuse. Call this method from your data source object when asked to provide a new cell for the table view. This method dequeues an existing cell if one is available or creates a new one based on the class or nib file you previously registered.

Important: You must register a class or nib file using the registerNib:forCellReuseIdentifier: or registerClass:forCellReuseIdentifier: method before calling this method.

If you registered a class for the specified identifier and a new cell must be created, this method initializes the cell by calling its initWithStyle:reuseIdentifier: method. For nib-based cells, this method loads the cell object from the provided nib file. If an existing cell was available for reuse, this method calls the cell’s prepareForReuse method instead.

这就是我的新 cellForRowAtIndexPath 在实现新方法后的样子:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"cell_identifier";

[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:cellIdentifier];

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];

return cell;
}

到目前为止,我的代码工作正常,但始终返回默认样式。如何更改此设置,以便我可以创建具有其他样式的单元格,例如 UITableViewCellStyleDefaultUITableViewCellStyleValue1UITableViewCellStyleValue2UITableViewCellStyleSubtitle >?

我不想子类化 UITableViewCell,我只想更改默认类型,就像在 iOS 6 之前所做的那样。Apple 提供增强的方法但只提供最少的文档,这似乎很奇怪支持他们的实现。

有谁掌握了这个,或者遇到过类似的问题吗?我正在努力寻找任何合理的信息。

最佳答案

我知道你说过你不想创建子类,但这看起来是不可避免的。根据在 iOS 6.0 模拟器中测试时的汇编代码,UITableView 通过执行

创建 UITableViewCell (或其子类)的新实例
[[<RegisteredClass> alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:<ReuseIdentifier>]

换句话说,发送的样式 (UITableViewCellStyleDefault) 似乎是硬编码的。为了解决这个问题,您需要创建一个子类来覆盖默认的初始化器 initWithStyle:reuseIdentifier: 并传递您希望使用的样式:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
// ignore the style argument, use our own to override
self = [super initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:reuseIdentifier];
if (self) {
// If you need any further customization
}
return self;
}

此外,最好在 viewDidLoad 中发送 registerClass:forCellReuseIdentifier:,而不是每次请求单元格时都执行此操作:

- (void)viewDidLoad
{
[super viewDidLoad];
[self.tableView registerClass:<RegisteredClass> forCellReuseIdentifier:<ReuseIdentifier>];
}

关于uitableview - 使用 iOS 6 UITableView dequeueReusableCellWithIdentifier 时设置 UITableViewCell 的样式 :forIndexPath:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13174972/

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