【发布时间】:2014-04-23 23:36:25
【问题描述】:
我需要更改应用中所有单元格的选定单元格背景颜色。据我所知,有一种方法可以为此目的使用UIAppearance 协议。是否可以通过UITableViewCell的类别来实现这一点?
【问题讨论】:
标签: ios objective-c uitableview uicolor uiappearance
我需要更改应用中所有单元格的选定单元格背景颜色。据我所知,有一种方法可以为此目的使用UIAppearance 协议。是否可以通过UITableViewCell的类别来实现这一点?
【问题讨论】:
标签: ios objective-c uitableview uicolor uiappearance
null 的回答是不适用于选定的单元格背景,而Armands L. 的回答不能始终如一地工作对我来说(通过“用户- tap' 确实有效,但程序化的单元格选择显示了奇怪的结果(比如有时所选背景不可见,或者没有正确填充单元格的高度......)。
我找到了一个有效的自定义解决方案:
UITableViewCell
init 中初始化self.selectedBackgroundView 和UIColor 属性和UI_APPEARANCE_SELECTOR 用于自定义选定的背景颜色.h文件:
@property (nonatomic) UIColor* selectedCellBackgroundColor UI_APPEARANCE_SELECTOR;
.m文件:
在init 方法中:
self.selectedBackgroundView = [[UIView alloc] init];
最后但并非最不重要的颜色设置函数:
- (void) setSelectedCellBackgroundColor:(UIColor*) color {
_selectedCellBackgroundColor = color;
self.selectedBackgroundView.backgroundColor = color;
}
【讨论】:
使用外观代理,您可以为所有单元格着色。不知道能不能定位到特定的类别。
要进行着色,请将以下代码放入您的 AppDelegate.m 文件中:
输入[self customCellBackground];
在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions
最后的某处:
- (void)customCellBackground {
UIView *cellBackgroundView =[[UIView alloc] init];
cellBackgroundView.backgroundColor = [UIColor blackColor];
[[UITableViewCell appearance] setSelectedBackgroundView:cellBackgroundView];}
【讨论】:
您不能直接对 UITableViewCell 执行此操作,但您可以为其contentView 执行此操作:
[[UIView appearanceWhenContainedIn:[UITableViewCell class], nil] setBackgroundColor:[UIColor redColor]];
注意它会改变所有子视图的背景颜色。
另一种选择是使用UI_APPEARANCE_SELECTOR 标记编写UITableViewCell 的类别或子类,请检查此问题:
iOS: Using UIAppearance to define custom UITableViewCell color
【讨论】:
UIAppearance 仅用于UITableViewCell 的selected 状态吗?