【问题标题】:Different "highlighted" color for accessory view based on what was tapped?根据点击的内容,附件视图的不同“突出显示”颜色?
【发布时间】:2012-12-14 15:33:37
【问题描述】:

我的设计师想出了一个有点棘手的设计。在 tableView 中,他们希望我
1) 有一个自定义附件视图 - (UIButton 子视图) - DONE
2) 为点击的单元格附件提供自定义操作(没有将 detailView 推送到导航堆栈,而是推送其他内容) - 完成

现在是棘手的部分。


1) 如果我点击单元格,附件视图应显示“highlightedBackground”。
2) 如果我点击附件视图,则只有附件视图应突出显示,但带有“alternativeHighlightedBackground”。

回顾一下,对于accessoryView,我们有普通背景和两种不同的高亮背景,这取决于是点击了整个单元格还是只点击了附件视图。

目前,我正在将 UIButton 作为子视图添加到 cellForRowAtIndexPath 中的附件视图中,用作自定义附件。显然,附件视图将触摸事件传递给按钮,并且按钮以相同的背景突出显示,而不管点击了什么。 该单元格目前不是自定义的,它是一个普通的 UITableViewCell 实例。 SDK是iOS5,可惜不能用iOS6。

有什么建议吗?

【问题讨论】:

    标签: objective-c cocoa-touch ios5


    【解决方案1】:

    我会放弃附件视图路线,并创建UITableViewCell 的子类。只需在 init 函数中创建您的按钮,将其作为子视图添加到单元格的 contentView,将按钮的修饰操作设置为您想要的任何内容,然后使用如下所示的内容覆盖 layoutSubviews

    - (void)layoutSubviews
    {
        [super layoutSubviews];
    
        CGRect bounds = self.contentView.bounds;
    
        CGFloat buttonOriginX = self.contentView.bounds.size.width - BUTTON_WIDTH - PAD;
        CGFloat buttonOriginY = floorf((bounds.size.height - BUTTON_HEIGHT)/2.0)+1;
    
        self.mybutton.frame = CGRectMake(buttonOriginX, buttonOriginY, BUTTON_WIDTH, BUTTON_HEIGHT );
    }
    

    按钮将在单元格以这种方式之前拦截触摸。然后,您可以完全控制触摸按钮时显示的内容(设置设置为突出显示状态图像)。

    【讨论】:

    • 我自己试验了一下,基本上用附件视图没什么问题。真正的问题是知道何时点击了单元格,何时没有点击。基于此,我需要将突出显示的背景设置为两个版本之一。问题是我没有可靠的方法来检测这一点,另一件事是一旦单元格再次显示在列表中,我需要将背景设置回默认值。
    • 在按钮的action方法中,将单元格背景设置成你想要的颜色。
    • 切换背景不是问题。我可以通过多种方式做到这一点。正如我所提到的,问题在于找出何时点击单元格以及何时点击附件视图。还要确保当我将此表视图推送到堆栈上或在弹出其他一些位于此之上的视图后再次显示时,正确的背景会被设置回来。我最终在自定义单元格中覆盖了 5 个方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 2020-06-07
    相关资源
    最近更新 更多