0

我想使用我在 CocoaControls 上找到的一个名为 SDNestedTable 的控件:https ://github.com/serverdensity/ios-SDNestedTable

我已经对类进行了子SDNestedTableViewController类化,但我想更改表格单元格的背景颜色,但没有提供这样做的方法。

SDGroupCell库中的其他类是SDSubCell继承自SDSelectableCell. SDSelectableCell包含 3 种根据单元格状态更改背景的方法。

以下是中的相关方法SDSelectableCell.m

- (void) styleEnabled
{
    for (UIView *view in checkBox.subviews) [view removeFromSuperview];
    [checkBox addSubview:onCheckBox];
    checkBox.alpha = 1.0;
    itemText.alpha = 1.0;
    self.backgroundView.backgroundColor = UIColorFromRGBWithAlpha(0x0d2e4d, 1.0);
}

- (void) styleDisabled
{
    for (UIView *view in checkBox.subviews) [view removeFromSuperview];
    [checkBox addSubview:offCheckBox];
    checkBox.alpha = 1.0;
    itemText.alpha = 0.4;
    self.backgroundView.backgroundColor = [UIColor colorWithWhite:0.0 alpha:1.0];
}

- (void) styleHalfEnabled
{
    for (UIView *view in checkBox.subviews) [view removeFromSuperview];
    [checkBox addSubview:onCheckBox];
    checkBox.alpha = 0.45;
    itemText.alpha = 0.7;
    self.backgroundView.backgroundColor = UIColorFromRGBWithAlpha(  , 1.0);
}

我可以看到两种方法,但我是新手,想验证处理这个问题的最佳方法:

1) 只需更改 SDSelectableCell.m 中的代码。我必须更改 3 行来设置 3 种颜色,然后我就完成了。但是,我认为导入这样的库并更改代码是不好的做法。如果从事该项目的人必须重新导入库并且不知道它已更改,我可以预见将来会出现问题。

1a)我想我也可以重命名/重构所有内容,使其不再是 SD,这至少可以防止其他人认为它是原始的 SDNestedTable 库。

2)我可以继承SDSelectableCell并覆盖这 3 种方法。虽然,这需要我对库中的所有其他类进行子类化,因为它们实例化了 SDSelectable 单元格,而我必须更改所有这些。

3)其他方式?类别和扩展似乎不起作用,但也许我错过了一些东西。

4

1 回答 1

0

快速浏览一下 github 代码后,它们似乎为您提供了一种简单的方法,可以按照您喜欢的方式设置单元格。在您SDNestedTableDelegate实施该-mainTable:itemDidChange:方法。

- (void)mainTable:(UITableView *)mainTable itemDidChange:(SDGroupCell *)item
{
    SelectableCellState state = item.selectableCellState;
    switch (state) {
        case Checked:
            item.backgroundView.backgroundColor = [UIColor ...];
            break;
        case Unchecked:
            item.backgroundView.backgroundColor = [UIColor ...];
            break;
        case Halfchecked:
            item.backgroundView.backgroundColor = [UIColor ...];
            break;
        default:
            break;
    }
}

更新

SDNestedTableViewController当您通过覆盖-mainTable:setItem:forRowAtIndexPath:和进行子类化时,该库似乎为您提供了格式化项目和子项目的地方-item:setSubItem:forRowAtIndexPath:。将其与上述项目相结合确实更改了代码并提取了通用功能,从而为您提供:

- (void)PRIVATE_finalizeSelectableCell:(SDSelectableCell *)item
{
    SelectableCellState state = item.selectableCellState;
    switch (state) {
        case Checked:
            item.backgroundView.backgroundColor = [UIColor ...];
            break;
        case Unchecked:
            item.backgroundView.backgroundColor = [UIColor ...];
            break;
        case Halfchecked:
            item.backgroundView.backgroundColor = [UIColor ...];
            break;
        default:
            break;
    }
}
- (void)mainTable:(UITableView *)mainTable itemDidChange:(SDGroupCell *)item
{
    [self PRIVATE_finalizeSelectableCell:item];
}
- (SDGroupCell *)mainTable:(UITableView *)mainTable setItem:(SDGroupCell *)item forRowAtIndexPath:(NSIndexPath *)indexPath 
{
    [self PRIVATE_finalizeSelectableCell:item];
    return item;
}
- (SDSubCell *)item:(SDGroupCell *)item setSubItem:(SDSubCell *)subItem forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self PRIVATE_finalizeSelectableCell:subItem];
    return subItem;
}
于 2013-02-12T02:17:57.763 回答