- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我已经实现了 UICollectionViewController 的一个子类,它可以水平滚动,我希望它一次只能选择一个项目。
当我在当前屏幕上更改所选项目时,它工作正常。但是,例如,如果我在集合的最开头选择一个项目,然后向右滚动并选择另一个项目,第一个项目仍将被选中。
这是我的 CollectionView 的当前版本:
class GenresCollectionVC: UICollectionViewController {
var selectedIndexPath: IndexPath?
// MARK: UICollectionViewDataSource
override func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return MockData.instance.genres.count
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(
withReuseIdentifier: reuseIdentifier, for: indexPath) as! GenreCollectionViewCell
cell.genreNameLabel.text = MockData.instance.genres[indexPath.row]
if selectedIndexPath == indexPath {
redraw(selectedCell: cell)
} else {
redraw(deselectedCell: cell)
}
return cell
}
// MARK: UICollectionViewDelegate
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
guard let cell = collectionView.cellForItem(at: indexPath) as? GenreCollectionViewCell else {
return
}
redraw(selectedCell: cell)
selectedIndexPath = indexPath
}
override func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {
guard let cell = collectionView.cellForItem(at: indexPath) as? GenreCollectionViewCell else {
return
}
redraw(deselectedCell: cell)
selectedIndexPath = nil
}
private func redraw(selectedCell cell: GenreCollectionViewCell
) {
cell.layer.borderWidth = 1.0
cell.layer.cornerRadius = cell.bounds.height / 2
cell.layer.borderColor = UIColor.violetNeeoColor.cgColor
cell.genreNameLabel.textColor = UIColor.violetNeeoColor
}
private func redraw(deselectedCell cell: GenreCollectionViewCell) {
cell.layer.borderWidth = 0.0
cell.layer.cornerRadius = 0.0
cell.genreNameLabel.textColor = UIColor.white
}
}
我做错了什么?
最佳答案
在您的 GenreCollectionViewCell
类中,覆盖 isSelected
属性,即
override var isSelected: Bool{
willSet{
super.isSelected = newValue
if newValue
{
self.layer.borderWidth = 1.0
self.layer.cornerRadius = self.bounds.height / 2
self.layer.borderColor = UIColor.violetNeeoColor.cgColor
self.genreNameLabel.textColor = UIColor.violetNeeoColor
}
else
{
self.layer.borderWidth = 0.0
self.layer.cornerRadius = 0.0
self.genreNameLabel.textColor = UIColor.white
}
}
}
现在您不需要在 didSelectItemAt
delegate
方法中手动选择/取消选择单元格。 isSelected
属性将自动处理它。
关于ios - 在 UICollectionViewController 中仅选择一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44205550/
我正在编写一个项目,我需要在水平 Collection View Controller /列表中显示玩家(头像)列表,我们称其为 HUD。 我希望这个 HUD 是通用的,也就是说:我知道这个组件会在整
我已经实现了自定义 UITabBarController 第一个和第二个 UITabBarItem 是一个 UICollectionViewController 第四个 UITabBarItem 是一
我想在我的应用中使用 UICollectionViewController 来显示照片。 我从 UICollectionViewController 派生了一个类: #import @interfa
我可以使用 self.navigationItem.leftBarButtonItem = self.editButtonItem; 通过按下导航面板上的编辑按钮让 UITableViewContro
我想在 iOS 6 下的 UICollectionViewController 中实现下拉刷新。使用 UITableViewController 可以轻松实现这一点,如下所示: UIRefreshCo
我收到错误: fatal error: unexpectedly found nil while unwrapping an Optional value didTapUserScreenButton
我在从子 UICollectionViewController 属性访问父属性时遇到问题。 父级是模态的 ChildViewController,它添加 UICollectionViewControl
当我使用以下代码在 UIViewController 中的 TableView 中选择一个单元格时,我一直试图连接到 UICollectionViewController: func tableVie
我的 collectionViewController 及其数据加载有问题... 我正在尝试加载一个外部 JSON 文件... 第一个问题是当应用程序加载时,CollectionViewControl
我正在尝试在 tabBarController 上添加 CollectionView 对于网格集合View 所以我制作了一个 UICollectionViewController 作为另一个 swif
我正在尝试布局 View 网格。每行应该有 3 个 View 。我试图定义我的 UICollectionViewController的构造函数如下: - (id)initWithDefaultLayo
我刚刚以编程方式创建了一个UICollectionViewController。到目前为止,一切都很好,但我面临一些问题。当调用 CollectionViewController 时,我的应用程序立即
我有一个 UICollectionViewController,它就像一个分页,每个单元格都有自己的页面。在导航栏上,它始终显示“返回”。以下不会更改标题。 -(void)viewWillAppear
这个问题在这里已经有了答案: Swift: IBoutlets are nil in Custom Cell (2 个答案) 关闭 5 年前。 Xcode 9.2、 swift 4我的 Main.s
我有一个名为 ProfileCollectionViewController 的 Collection View ,用于收集图像。单击图像时,它会显示一个全屏显示图像的 HorizontalPro
我有一个简单的 UICollectionViewController,它是一个带有固定到可见边界的页眉和页脚的部分。当我单击页脚中的 textField 时,页脚会自动在键盘上方设置动画,并且 col
我可以使用以下代码从 appdelegate 启动 FriendsController(UICollectionViewController): window = UIWindow(frame: UI
使用 UICollectionViewController 我可以轻松启用重新排序。但要真正重新排序,我必须长按单元格才能开始重新排序状态。 (注意从圆圈到单元格实际移动的延迟。) 由于我以类似跳板的
我正在使用 ParseFramework 获取一些图像并将它们显示在 collectionViewController 中。问题是,如果我在加载所有图像之前滚动,我会遇到图像重复,所以我会在不同的单元
我试图显示我的收藏 View ,但我得到的只是黑屏。我知道我在某处遗漏了一些东西,但我似乎找不到它是什么。 #import "StoreCollectionViewController.h" #imp
我是一名优秀的程序员,十分优秀!