0

在我的应用程序中,我有一个包含 12 种自定义单元格的表格视图。我在故事板中设计了每一个。一般来说,一切正常 - 感谢您的教程 :) 我的问题是,我在每个单元格中都有单独的样式和附加数据 - 因此我不希望它们被重用。如何从情节提要生成单个自定义单元格以在 -

tableView:cellForRowAtIndexPath:indexPath?

有什么建议么?谢谢多米尼克

添加:

    newCell = [tableView dequeueReusableCellWithIdentifier:cellType]; 
    cell = newCell;
    [cell styleWithElement:element andResubItem:resubItem];

我的问题是,我需要另一种方法从故事板创建自定义样式的单元格而不是上面引用的 - 我没有 XIB,上述方法是我知道创建单元格的唯一方法。是否可以通过上述方式创建一个单元格类型然后复制该单元格?有没有办法复制单元格对象?

4

1 回答 1

0

您可以每次生成一个随机单元 ID,这样它就不会被重复使用。

但是,这对于滚动性能和内存消耗来说并不是很好,因此请考虑实际重用单元格(即想出一种方法来替换其中的数据)。

编辑:

您总是可以将视图从一个复制到另一个,类似于以下内容:

UITableViewCell* myCell = [UITableViewCell alloc] initWithStyle:YOUR_CELL_STYLE reuseIdentifier:YOUR_RANDOM_ID];
for (UIView *view in newCell.subviews) {
    [view removeFromSuperview];
    [myCell addSubview: view];
}

您可能还需要将 myCell 的框架调整为与 newCell 的框架相同,如果 newCell 是任何事件的动作目标(例如,单击单元格内的控制元素会触发单元格类中定义的某些动作),您将也需要将它们重新分配给 myCell。

编辑2:

要移动操作,您可以执行以下操作:

NSSet* targets = [control allTargets];
for(id target in targets) {

    NSArray* actions = [control actionsForTarget:target forControlEvent:UIControlEventTouchUpInside];
    for(NSString* selectorName in actions) {
    [newControl addTarget:target action:NSSelectorFromString(selName) forControlEvents:UIControlEventTouchUpInside];
    }
}

用你的新单元格替换目标 - 并确保它实现了所有必要的选择器(或者你可以放置一个新的选择器)。上面的代码将替换 UIControlEventTouchUpInside 的目标 - 您可以使用您需要的目标(或使用 allControlEvents 枚举控件使用的目标)。

于 2011-11-21T17:29:02.607 回答