如何解决添加手势识别器后未修改UICollectionViewCell背景色
长话短说-尝试实现 whatsapp 样式的邮件回复功能。
- 长按(按住)聊天气泡上的用户
- 聊天气泡和单元格背景颜色发生变化,表明已选择
- 呈现一个操作栏,询问用户是否要回复消息
- 如果用户按下回复,则将单元格背景色和聊天气泡颜色恢复为默认值
我通过添加到整个收藏夹视图中的UILongTapGesture
实现了这一目标
问题: 手势识别 点击 点和索引 路径。当我使用print(indexPath.item)时,也会打印准确的索引路径。问题是我无法修改使用此索引路径访问的单元格的属性。我相信我正在以正确的方式访问该单元。我想在用户点击某个单元格但没有任何反应后更改该单元格的背景颜色和聊天气泡
代码如下:
@objc func handleLongPress(_ gestureRecognizer: UILongPressGestureRecognizer){
let generator = UINotificationFeedbackGenerator()
generator.prepare()
if gestureRecognizer.state == .began {
generator.notificationOccurred(.success)
let touchPoint = gestureRecognizer.location(in: self.collectionView)
if let indexPath = collectionView.indexPathForItem(at: touchPoint) {
let cell = collectionView(self.collectionView,cellForItemAt: indexPath) as? ChatCell
//DOES NOT WORK
cell?.backgroundColor = UIColor.black
let alertController = UIAlertController(title: "Actions",message: "Press reply to reply to selected messages",preferredStyle: .actionSheet)
let replyAction = UIAlertAction(title: "Reply",style: .default) { (_) in
//do stuff here
alertController.dismiss(animated: true,completion: nil)
}
let cancelAction = UIAlertAction(title: "Cancel",style: .cancel) { (_) in
cell?.backgroundColor = .clear
alertController.dismiss(animated: true,completion: nil)
}
alertController.addAction(replyAction)
alertController.addAction(cancelAction)
self.present(alertController,animated: true)
}
}
}
这就是我添加手势识别器的方式:
let longPressGesture: UILongPressGestureRecognizer = UILongPressGestureRecognizer(target: self,action: #selector(self.handleLongPress))
longPressGesture.minimumPressDuration = 1.0 // 1 second press
longPressGesture.delegate = self
self.collectionView.addGestureRecognizer(longPressGesture)
这是我的收藏集查看单元格:
override init(frame: CGRect) {
super.init(frame: frame)
addSubview(bubbleView)
bubbleView.layer.cornerRadius = 12
bubbleView.anchor(top: topAnchor,leading: nil,bottom: bottomAnchor,trailing: nil,padding: .init(top: 16,left: 0,bottom: 16,right: 0))
bubbleView.widthAnchor.constraint(lessThanOrEqualToConstant: 250).isActive = true
bubbleConstraintLeading = bubbleView.leadingAnchor.constraint(equalTo: leadingAnchor,constant: 16)
bubbleConstraintTrailing = bubbleView.trailingAnchor.constraint(equalTo: trailingAnchor,constant: -16)
bubbleView.addSubview(messageLabel)
messageLabel.numberOfLines = 0
messageLabel.anchor(top: bubbleView.topAnchor,leading: bubbleView.leadingAnchor,bottom: bubbleView.bottomAnchor,trailing: bubbleView.trailingAnchor,padding: .init(top: 4,left: 16,bottom: 4,right: 16))
addSubview(timestampLabel)
timestampLabel.anchor(top: bubbleView.bottomAnchor,right: 0))
timestampConstraintLeading = timestampLabel.leadingAnchor.constraint(equalTo: leadingAnchor,constant: 24)
timestampConstraintTrailing = timestampLabel.trailingAnchor.constraint(equalTo: trailingAnchor,constant: -24)
}
解决方法
C:\server\share\Path\To\Images\On\Network
您不应像这样调用DataSource方法。
如果要获取给定let cell = collectionView(self.collectionView,cellForItemAt: indexPath) as? ChatCell
处的单元格,则应使用IndexPath
函数
UICollectionView
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。