我想使用我在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)其他一些方式?类别和扩展似乎不起作用,但也许我错过了一些东西。
答案 0 :(得分: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;
}