Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 故事板和自定义单元格我不想重复使用_Ios_Xcode_Storyboard_Reusability_Cells - Fatal编程技术网

Ios 故事板和自定义单元格我不想重复使用

Ios 故事板和自定义单元格我不想重复使用,ios,xcode,storyboard,reusability,cells,Ios,Xcode,Storyboard,Reusability,Cells,在我的应用程序中,我有一个包含12种自定义单元格的表视图。 我在故事板中设计了每一个。 一般来说,一切正常-感谢您的教程: 我的问题是,我在每个单元格中都有单独的样式和额外的数据,因此我不希望它们被重用。 我如何从故事板生成单个自定义单元,以便在- tableView:cellForRowAtIndexPath:indexPath 有什么建议吗? 谢谢 多米尼克 增加: newCell = [tableView dequeueReusableCellWithIdentifier:cell

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

tableView:cellForRowAtIndexPath:indexPath

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

增加:

    newCell = [tableView dequeueReusableCellWithIdentifier:cellType]; 
    cell = newCell;
    [cell styleWithElement:element andResubItem:resubItem];
我的问题是,我需要另一种方法来从故事板创建自定义样式的单元格,而不是上面提到的方法-我没有XIB,上面提到的方法是我知道的创建单元格的唯一方法。
按上述方法创建一个单元类型,然后复制该单元,这是一种解决方案吗?有办法复制单元格对象吗?

您可以每次生成一个随机单元格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枚举控件使用的目标。

感谢您的回答。但是,由于我使用故事板,我必须应用我在故事板中使用的单元格标识符,或者是否可以根据故事板单元格创建一个新的单元格,而不使用dequeueReusableCellWithIdentifier?请参阅修改后的答案。顺便说一句,你可能想在编辑你的问题后添加一条评论,否则回复你的人将不会收到通知。但是我应该提交哪种类型的单元格?我在故事板中有单元格设计,但我无法通过initWithStyle处理它们,可以吗?可能任何样式都可以-它们是单元格将具有的视图的预设,但您正在添加自己的视图,因此只需设置UITableViewCellStyleDefault,并在添加新视图之前从myCell中删除所有视图。请注意,各种UITableViewCell属性(如textLabel、imageView等)将不起作用,因为它们连接到默认视图,您将丢弃它们并用自己的视图替换它们。我的单元格是自己的子类,因此我创建了自己的子类单元格,将其与唯一标识符关联,并按照您的建议复制所有视图-works。。。直到第一个用户操作发生,因为我在某个单元格中附加了手势识别器。子视图。。。六羟甲基三聚氰胺六甲醚。。。。我想我必须保存所有相关的单元格属性,特别是sub.object.properties,并在行重新出现时还原它们。。。。感谢@SVD的交流