我正在使用[UITableView registerClass: forReuseIdentifier:]和[UITableView dequeueReusableCellWithIdentifier:]来排队和出列UITableViewCells。
例如,在viewDidLoad中:
[self.storeTableView registerClass:[StoreLineGraphCell class] forCellReuseIdentifier:@"StoreLineGraphCellIdentifier"];
在cellForRowAtIndexPath中:
StoreLineGraphCell *cell = (StoreLineGraphCell*)[self.storeTableView dequeueReusableCellWithIdentifier:@"StoreLineGraphCellIdentifier"];
在这样做时,为initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier调用initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier初始值设定项。 问题是我需要使用自定义初始化程序来创建具有必要选项的单元格。 例如,能够做这样的事情:
StoreLineGraphCell *cell = [[StoreLineGraphCell alloc] initWithReuseIdentifier:@"StoreLineGraphCell" isLocked:YES isUpcoming:YES];
registerClass和dequeue模式似乎不可能这样。 我想将它保存在初始化程序中,因为它应该只运行一次,而不是每次单元格出列时。 有没有正确的方法来实现这一目标?
I'm using [UITableView registerClass: forReuseIdentifier:] and [UITableView dequeueReusableCellWithIdentifier:] in order to queue and dequeue UITableViewCells.
For example, in viewDidLoad:
[self.storeTableView registerClass:[StoreLineGraphCell class] forCellReuseIdentifier:@"StoreLineGraphCellIdentifier"];
And in cellForRowAtIndexPath:
StoreLineGraphCell *cell = (StoreLineGraphCell*)[self.storeTableView dequeueReusableCellWithIdentifier:@"StoreLineGraphCellIdentifier"];
In doing this, the initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier initializer is called for the UITableViewCell. The problem is that I need to use a custom initializer in order to create the cell with necessary options. For example, the ability to do something like this:
StoreLineGraphCell *cell = [[StoreLineGraphCell alloc] initWithReuseIdentifier:@"StoreLineGraphCell" isLocked:YES isUpcoming:YES];
This doesn't seem possible with the registerClass & dequeue pattern. I'd like to keep it in an initializer as it should only be run once, not every time the cell is dequeued. Is there a proper way to accomplish this?
最满意答案
当你遵循通常的单元格重用模式时(就像你使用注册类和出队一样),我看不到一种易于实现的方法。
如果我是你,我会创建一个额外的初始化方法(不遵循通常的obj-c init模式)或简单地设置并在dequeueReusableCellWithIdentifier调用之后调用它。
StoreLineGraphCell *cell = (StoreLineGraphCell*)[self.storeTableView dequeueReusableCellWithIdentifier:@"StoreLineGraphCellIdentifier"]; [cell furtherInitWithLocked:YES andUpcoming:NO]; // ... or soWhile you follow the usual pattern for cell re-usage (as you do with register class & dequeue), I do not see an easy to implement way of doing that.
If I were you I would create an additional initialization method (not following the usual init pattern of obj-c) or simply setters and call that following the dequeueReusableCellWithIdentifier call.
StoreLineGraphCell *cell = (StoreLineGraphCell*)[self.storeTableView dequeueReusableCellWithIdentifier:@"StoreLineGraphCellIdentifier"]; [cell furtherInitWithLocked:YES andUpcoming:NO]; // ... or so更多推荐
发布评论