【问题标题】:Change the selected cell background colour using UIAppearance使用 UIAppearance 更改选定的单元格背景颜色
【发布时间】:2014-04-23 23:36:25
【问题描述】:

我需要更改应用中所有单元格的选定单元格背景颜色。据我所知,有一种方法可以为此目的使用UIAppearance 协议。是否可以通过UITableViewCell的类别来实现这一点?

【问题讨论】:

    标签: ios objective-c uitableview uicolor uiappearance


    【解决方案1】:

    null 的回答是不适用于选定的单元格背景,而Armands L. 的回答不能始终如一地工作对我来说(通过“用户- tap' 确实有效,但程序化的单元格选择显示了奇怪的结果(比如有时所选背景不可见,或者没有正确填充单元格的高度......)。

    我找到了一个有效的自定义解决方案:

    1. 子类UITableViewCell
    2. init 中初始化self.selectedBackgroundView
    3. 添加自定义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;
    }
    

    【讨论】:

      【解决方案2】:

      使用外观代理,您可以为所有单元格着色。不知道能不能定位到特定的类别。

      要进行着色,请将以下代码放入您的 AppDelegate.m 文件中:

      输入[self customCellBackground];- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions

      最后的某处:

      - (void)customCellBackground {
      UIView *cellBackgroundView =[[UIView alloc] init];
      cellBackgroundView.backgroundColor = [UIColor blackColor];
      [[UITableViewCell appearance] setSelectedBackgroundView:cellBackgroundView];}
      

      【讨论】:

      • 不建议将这样的东西放入 AppDelegate。至少将它包装在一个处理全局样式的类中,并让 AppDelegate 在启动时调用它。
      【解决方案3】:

      您不能直接对 UITableViewCell 执行此操作,但您可以为其contentView 执行此操作:

      [[UIView appearanceWhenContainedIn:[UITableViewCell class], nil] setBackgroundColor:[UIColor redColor]];
      

      注意它会改变所有子视图的背景颜色。

      另一种选择是使用UI_APPEARANCE_SELECTOR 标记编写UITableViewCell 的类别或子类,请检查此问题:

      iOS: Using UIAppearance to define custom UITableViewCell color

      【讨论】:

      • 这似乎改变了所有单元格的背景,无论是否选择状态。
      • 这看起来不错,但是您可以将UIAppearance 仅用于UITableViewCellselected 状态吗?
      • @CliftonLabrum 我在下面添加了一个答案,可能会回答您的问题。
      猜你喜欢
      • 2011-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-24
      • 2013-04-12
      • 2021-10-31
      • 2015-10-09
      • 2016-05-27
      相关资源
      最近更新 更多