- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
想象一下您有一个 UICollectionView
的场景,并且您希望在每个单元格中有一个按钮填充整个单元格,以便您可以响应各种触摸事件来处理高亮外观。例如,当用户按下按钮时,您想要更改按钮的背景颜色,然后在他们拖出或取消触摸等时恢复它。现在想象一下这种情况,您不想更改按钮的背景颜色,而是要更改按钮的背景颜色单元格的 backgroundView
。 UIButton
没有背景 View ,只有 backgroundColor
或 backgroundImage
。
我有一个解决方案,但我想知道如果不推荐这种方法,它是否可以更清洁。触摸按钮后,我遍历它的 superview
直到我得到 UICollectionViewCell
然后我将它的 selected
属性设置为 true
。在 cellForItemAtIndexPath
中,我根据需要设置了 selectedBackgroundView
。这样得到了想要的行为,但是用selected state来表示highlight state,这样管理是不是不合适?什么会更好?
我可以在触摸按钮时获取 UICollectionViewCell
然后更改其 backgroundView
属性而不是在创建每个单元格时都这样做,这样就不需要更改 选择
值。但这仍然不是一个很好的解决方案。
最佳答案
您不需要在 Collection View 单元格内设置一个按钮,只需在按下按钮时设置其突出显示颜色即可。只需将您的单元格的 selectedBackgroundView
设置为与您的单元格具有相同宽度和高度的 View ,并为该 View 提供您希望用来突出显示该单元格的 backgroundColor
。
我做的(肮脏的)实现是这样的:
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("CELL", forIndexPath: indexPath) as UICollectionViewCell
cell.selectedBackgroundView = {
let bgview = UIView(frame: CGRectMake(0, 0, cell.frame.size.width, cell.frame.size.height))
bgview.backgroundColor = UIColor.redColor()
return bgview
}()
return cell
}
然后,只需取消选择 didSelectItemAtIndexPath
中的单元格。 “按住”会自动为您处理,取消选择动画只会在用户抬起手指时触发。
我认为这很脏,因为每次单元格出列以便在 cellForItemAtIndexPath:
中重用时,您都在设置 selectedBackgroundView
。我要做的是创建一个 UICollectionViewCell
子类,从那里设置它的 selectedBackgroundView
,然后使用 registerNib:
或 注册该单元格registerClass:
在 Collection View 上。
添加:更清洁的版本。在您的自定义 Collection View 单元子类中,分配 backgroundView
和 selectedBackgroundView
:
override init(frame: CGRect) {
super.init(frame: frame)
self.backgroundView = {
let view = UIView()
view.backgroundColor = UIColor.yellowColor()
return view
}()
self.selectedBackgroundView = {
let view = UIView()
view.backgroundColor = UIColor.redColor()
return view
}()
}
以及 View Controller 、 Collection View 数据源和委托(delegate)中的相关方法:
override func viewDidLoad() {
super.viewDidLoad()
self.collectionView.registerClass(NSClassFromString("test.CustomCollectionViewCell"), forCellWithReuseIdentifier: "CELL")
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("CELL", forIndexPath: indexPath) as UICollectionViewCell
return cell
}
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
collectionView.deselectItemAtIndexPath(indexPath, animated: true)
}
关于ios - 使用 selectedBackgroundView 显示高亮状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27773119/
我的 UITableViewCells 都是预定义的“字幕”样式。我想将所选单元格的背景图像设置为另一张图片。我尝试了各种方法来实现这个,在 stackoverflow 上讨论的所有方法似乎都失败了。
我正在尝试为我的 collectionView 单元格创建自定义 selectedBackgroundView。我将 UIView 子类化,这是我的 drawRect 实现: override fun
我有一个带有自定义 selectedBackgroundView 的自定义 UITableViewCell。 selectedBackgroundView 显示时是否有委托(delegate)方法?例
想象一下您有一个 UICollectionView 的场景,并且您希望在每个单元格中有一个按钮填充整个单元格,以便您可以响应各种触摸事件来处理高亮外观。例如,当用户按下按钮时,您想要更改按钮的背景颜色
我设置了自定义UITableViewCell有多个标签和一个图像,我(终于)让它看起来像我想要的样子。 但是,我似乎无法弄清楚如何让选择看起来像我想要的样子。我已经实现了setSelected方法,它
我需要为 UITableViewCell 的 selectedBackgroundView 更改 alpha。所以我做了以下事情: UITableViewCell *cell = [tableView
我有一个 UICollectionView。一些单元格内部带有白色背景颜色。我已将 selectedBackgroundView 设置为基本的紫色 View 。 我的 CollectionView 有
我正在为 UITableViewCell 子类使用自定义 backgroundView 和 selectedBackgroundView。这些单元格位于分组表中,因此我根据 cellForRowAtI
我显示了一个表格单元格,其中显示了用户图像、名称和一些文本。用户的图像为 50x50,但我想要在其周围有边框,因此我将 View 设置为图像居中并将框架设置为 52x52,然后将该 View 的背景颜
我在 iOS7 中使用 UITableVeiw 和静态单元格。在我将 Storyboard转换为使用自动布局之前,表格 View 看起来像这样。 我正在使用 tableviewcell 的“背景 Vi
我有一个 UITableView,在 cellForRowAtIndexPath 方法中我设置了单元格的 SelectedBackgroundView 属性。当我手动点击单元格时,背景 View 会正
我正在使用 TableView 来显示树结构。每个单元格对应一个用户可以展开或折叠的节点。每个节点的级别通过在单元格的前缘具有越来越大的缩进来可视化。这些缩进是使用 layoutMargins 设置的
使用 UITableView Style Grouped 后,使用带有自定义颜色的 selectedBackgroundView 时会出现问题。 它在 UITableViewCell 之外绘制。是否可
注意:在将我的问题标记为重复之前,请仔细阅读。重复我按下并按住表格 View 单元格的问题状态的步骤,这意味着我从不“选择”该单元格(进一步证明 didSelectRowAtIndexPath 永远不
我知道如果我想改变 UITableViewCell 的高亮,我需要运行下面的代码: self.selectedBackgroundView = UIView(frame: self.frame) se
致力于将 iOS6 应用程序转换为 iOS7,他们正在使用它来设置分组 TableView 样式。 cell.backgroundView = aView; cell.selected
我已经阅读并尝试了一些在 StackOverflow 上找到的答案。我也阅读并尝试了博客中的一些东西,但似乎没有任何东西可以实现我正在寻找的东西。 我创建了一个 UIView 并将其背景颜色设置为我想
我有一个 UITableView 呈现自定义类 DrawerTableCell 的单元格,它是这样声明的: class DrawerTableCell: UITableViewCell { @
我刚刚开始实现多选 UICollectionView。下面会被认为是“安全”代码吗(因为我假设有一些原因它被称为 BackgroundView 而不是 AccessoryView 或类似的)?我想节省
在以下任何方法中设置 backgroundView 和 selectedBackgroundView 似乎都不起作用。 UIView * bSg = [[UIView alloc] init]; UI
我是一名优秀的程序员,十分优秀!