背景描述
接触IOS开发十来天,需要做一个侧滑目录,侧滑功能使用SWRevealViewController框架。由于是新手嘛,觉得手写代码很麻烦,所以在storyboard中单独拖了一个UITableViewController的Scene,对应的UITableView选用Static Cells。
有两级目录,第一级选中背景颜色是灰色,用原生的UITableViewCellSelectionStyleGray就可以。第二级要求没有背景色,文字变成绿色的。
捣鼓了一阵子发现原生可选项只有白色、灰色和没有(原来还有个blue,现在blue也没了)。于是就有了这个问题。
解决方案
思路一:
用代码设置。
动态的Cell只要指定DataSourse,实现tableView:cellForRowAtIndexPath:indexPath就可以根据路径为每个cell分别设置各种属性。换成了Static Cells怎么获取到cell呢?(百度一下各种答案还挺多的,今天有点晚了,一会还得赶地铁就先不写,下次补充。)
另外和可以在什么tableView:didSelectRowAtIndexPath:indexPath之类的函数里做。
还想过在viewDidLoad里遍历一下,后来发现viewDidLoad里还拿不到cell,要等viewWillAppear的时候才行。
思路二:
利用IBInspectable,实现一个UITableViewCell的子类,添加一个自定义的selectedBackgroundColor属性,把storyboard中的UITableView选择为自己的子类,以可视化的方式设置。
代码如下:
@interface CZTableViewCell : UITableViewCell
@property (nonatomic,assign) IBInspectable UIColor *selectedBackgroundColor;
@end
IBInspectable
@implementation CZTableViewCell
-(void)setSelectedBackgroundColor:(UIColor *)selectedBackgroundColor {
UIView *view = [[UIView alloc] initWithFrame:self.frame];
self.selectedBackgroundView = view;
self.selectedBackgroundView.backgroundColor = selectedBackgroundColor;
}
@end
在storyboard中是这样的:
问题
- 用代码在tableView:didSelectRowAtIndexPath:indexPath里设置背景颜色会碰到颜色变深,不知道为什么
- 以扩展的方式直接为UITableCell增加这个属性也可以在storyboard显示出这个框,但是运行的时候会有this class is not key value coding-compliant for the key:selectedBackgroundColor,不知道为什么
- 有没有更好的方式?
希望有小伙伴指点迷津