我不想重复使用故事板和海关单元

发布于 2024-12-17 09:53:09 字数 552 浏览 2 评论 0原文

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

tableView:cellForRowAtIndexPath:indexPath?

中提供它? 有什么建议吗? 谢谢 多米尼克

补充道:

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

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

In my app I have a table view with 12 types of custom cells.
I designed each within the storyboard.
In general everything works fine - thanks to your tutorials :)
My problem is, that I have individual styles an additional data in each cell - therefore I don't want them to be reused.
How can I generate a individual custom cell from storyboard to provide it in the -

tableView:cellForRowAtIndexPath:indexPath?

Any suggestions?
Thanks
Dominic

Added:

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

my problem is, I need another way to create a custom-styled cell from the storyboard than the quouted above - I have no XIB and the above way is the only way I know to create my cell.
Could it be a solution to create a celltype once the above way and then copy the cell? Is there a way to copy a cell-object?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无力看清 2024-12-24 09:53:09

您可以每次生成一个随机小区 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。

Edit2:

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

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 枚举控件使用的目标)。

You can generate a random cell ID each time so it won't be reused.

However, that would not be very good for scroll performance and memory consumption, so consider actually reusing the cells (i.e. come up with a way to replace data in them).

Edit:

you can always just copy the views from one to another, something along these lines:

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

You may also need to adjust the frame of myCell to be the same as that of newCell, and if newCell is an action target for any events (e.g. clicking a control element within the cell triggers some action defined in the cell class) you'll need to reassign those to the myCell, too.

Edit2:

To move actions you could do something like this:

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];
    }
}

Substitute your new cell for the target - and make sure it implements all the necessary selectors (or you can put a new selector). The code above will replace targets for UIControlEventTouchUpInside - you can use the ones you need instead (or use allControlEvents to enumerate the ones used by a control).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文