从 UITableView 继承什么

发布于 2024-12-11 17:17:58 字数 199 浏览 0 评论 0原文

假设我有 10 个 tableView,所有部分都需要将第一个单元格的背景设置为红色。

为了不对所有 10 个表视图手动执行此操作,我认为应该子类化 UITableView。

我的问题是:我应该从 UITableView 覆盖什么?

或者我应该子类化 UITableViewCell 并且所有单元格都从这里继承?

谢谢。

Let's say I have 10 tableViews that all need to have the first cell's background , in all sections , color set to red.

In order not to do that manually for all the 10 table views I'm thinking that I should subclass UITableView.

My question would be: what should I overwrite from UITableView?

Or should I subclass UITableViewCell and all cells inherit from here?

Thanks.

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

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

发布评论

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

评论(1

不可一世的女人 2024-12-18 17:17:58

您可以子类化 UITableViewCell,然后您必须以某种方式将部分和行提供给单元格,以便它知道设置背景。

但是,您也可以子类化 UITableView。如果您选择子类化 UITableView,下面是一个解决方案,但最终这是您的决定。

我现在能想到的唯一方法是以某种方式捕获对 tableView 数据源的所有请求,以便您可以操纵结果。

你可以这样做:

  • 子类 UITableView,我们这样称呼它 MyUITableView:

  • 添加一个成员变量 id; myDataSource,以及设置了 IBOutlet 的该变量的属性。然后在 Interface Builder 中,您应该使用此属性而不是标准的 uitableview 数据源属性来连接表视图。

  • initloadView 中的某个位置,写入 self.dataSource = self。这个想法是捕获所有请求(特别是 cellForRowAtIndexPath),以便您可以操纵实际结果。

  • 在您的子类中,实现 UITableViewDataSource 协议,并将所有调用转发到 myDataSource 对象。

  • 唯一的例外是在 cellForRowAtIndexPath 实现中,从 myDataSource 获取结果后,如果满足特定条件,您可以更改背景颜色。请参阅下面的示例代码

@interface MyUITableView : UITableView { id;我的数据源; @property

(非原子,保留) IBOutlet id;我的数据源;

@end



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Get the result from the actual data source
    UITableViewCell* cell = nil;
    if (myDataSource)
        cell = [myDataSource tableView:self cellForRowAtIndexPath:indexPath];

    // If you condition is met, then just modify the cell in some way
    if (indexPath.section == 0 && indexPath.row == 0)
        cell.contentView.backgroundColor = [UIColor redColor];

    return cell;
}

这几乎就是您所需要的。我不知道我是否说得足够清楚,但如果您有任何疑问,请不要犹豫。

You can subclass UITableViewCell and then you will have to somehow give the section&row to the cell so that it knows to set the background.

However, you can also subclass UITableView. Below is a solution if you choose to subclass UITableView, but in the end it's your decision.

The only way I can think of right now is to somehow catch all requests to the tableView data source so that you can then manipulate the results.

You can do it like this:

  • Subclass UITableView, let's call it MyUITableView like this:

  • Add a member variable id<UITableViewDataSource> myDataSource, and also a property for this variable with IBOutlet set to it. Then in Interface Builder, you should connect the table view using this property instead of the standard uitableview datasource property.

  • Somewhere in the init or loadView, write self.dataSource = self. The idea is to catch all requests (expecially cellForRowAtIndexPath) so that you can manipulate the actual results.

  • In your subclass, implement the UITableViewDataSource protocol, and just forward all calls to the myDataSource object.

  • The only exception is in the cellForRowAtIndexPath implementation where after you get the result from myDataSource, you can change the background color if a specific condition is met. See an example code below

@interface MyUITableView : UITableView { id<UITableViewDataSource> myDataSource; }

@property (nonatomic, retain) IBOutlet id<UITableViewDataSource> myDataSource;

@end



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Get the result from the actual data source
    UITableViewCell* cell = nil;
    if (myDataSource)
        cell = [myDataSource tableView:self cellForRowAtIndexPath:indexPath];

    // If you condition is met, then just modify the cell in some way
    if (indexPath.section == 0 && indexPath.row == 0)
        cell.contentView.backgroundColor = [UIColor redColor];

    return cell;
}

And this is pretty much all you need. I don't know if I was clear enough, but if you have any questions don't hesitate.

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