如果我在分组的UITableViewCell上设置backgroundColor属性,则背景颜色会成功更改.大.
但是我想使用UIAppearance来改变我所有UITableViewCells的背景颜色,所以我可以在一个地方完成它并影响到处的变化.这是我的代码:
[[UITableViewCell appearance] setBackgroundColor:[UIColor colorWithRed:30.0/255.0 green:30.0/255.0 blue:30.0/255.0 alpha:1.0]];
Run Code Online (Sandbox Code Playgroud)
UITableViewCell实现了UIAppearance和UIAppearanceContainer,所以我认为这样可行.但事实并非如此.我也尝试过使用-[UITableViewCell appearanceWhenContainedIn:(Class)]
,但这也不起作用.
有任何想法吗?
lxt*_*lxt 42
更新(2013/7/8) - 已在较新版本的iOS中修复此问题.但是,如果您的目标是iOS 6或更低版本,则值得了解.
你可以责怪苹果这个,它实际上是他们的意思.从技术上讲,不能通过外观代理进行backgroundColor
自定义.
来自Apple的文档:
为了支持外观定制,类必须符合UIAppearanceContainer协议和相关的访问方法必须注明UI_APPEARANCE_SELECTOR.
如果我们进入类似的类UIBarButtonItem
并查看tintColor
属性,我们会看到:
@property(nonatomic,retain) UIColor *tintColor UI_APPEARANCE_SELECTOR;
Run Code Online (Sandbox Code Playgroud)
所以因为它标有UI_APPEARANCE_SELECTOR
标签,我们知道它可以使用UIAppearance
.
这里是Apple特别吝啬的地方:在a中UIView
,backgroundColor
没有外观选择器标签,但仍可使用UIAppearance
.根据Apple提供的所有文档,它不应该,但它确实如此!
这给人一种误导性的印象,即它适用于所有子类UIView
,包括UITableView
.在之前的SO回答中,这已经出现了
所以最重要的是,backgroundColor
根本不应该使用UIAppearance
,但由于某种原因,它确实在a UIView
.它不能保证在UIView
子类上工作,它根本不起作用UITableView
.对不起,我不能给你一个更积极的答案!
Nat*_*ter 17
您可以创建自己的符合UIAppearance的UITableViewCell子类,并使用UI_APPEARANCE_SELECTOR标记自定义setter.然后在自定义setter的超类上设置单元格backgroundColor.
在你的appDelegate中
[[CustomCell appearance] setBackgroundCellColor:[UIColor redColor]];
Run Code Online (Sandbox Code Playgroud)
在您的UItableView子类中
@interface CustomCell : UITableViewCell <UIAppearance>
@property (nonatomic, weak) UIColor *backgroundCellColor UI_APPEARANCE_SELECTOR;
Run Code Online (Sandbox Code Playgroud)
@implementation CustomCell
@synthesize backgroundCellColor;
-(void)setBackgroundCellColor:(UIColor *)backgroundColor
{
[super setBackgroundColor:backgroundColor];
}
Run Code Online (Sandbox Code Playgroud)
我在这个例子中使用ARC.
归档时间: |
|
查看次数: |
12352 次 |
最近记录: |