我有一个使用Please select corresponding template.
创建的简单聊天。我想添加长按后突出显示消息的功能。实际上,我想创建类似iMessage的功能:
长按后,我们取消突出显示背景(更暗),突出显示消息,滚动到该消息并显示UITableView
目前,我仅添加了actionSheet
和longPress
在actionSheet
上按长按reongizer:
viewDidLoad
let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(onCellLongPressed(gesture:)))
messagesTableView.addGestureRecognizer(longPressRecognizer)
功能:
onCellLongPressed
答案 0 :(得分:1)
如您所见,背景颜色在导航栏上方,因此我猜想当用户选择一个单元格时,集合视图上方会巧妙地显示一个辅助视图控制器。
我认为这是两个不同的视图层次结构,看起来像一个:
这是路线图:
这里是example project。
答案 1 :(得分:0)
很抱歉,这个答案不能完全满足您的要求,但希望对您有所帮助。
您的初始代码正确,但是您尚未设置滚动类型。因此,我建议您使用此方法selectRow(at:animated:scrollPosition:)只需设置滚动位置:
self.messagesTableView.selectRow(at: indexPath, animated: true, scrollPosition: UITableViewScrollPosition.top)
这还将选择此行,因此调用以下方法tableView(_:didSelectRowAt:)。因此,您将需要在此处实现突出显示逻辑:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// your logic of changing color
}
然后,您应该执行类似的操作,但是要使用deselectRow(at:animated:)取消选择该行,我认为应该在用户完成操作后执行此操作。另外,您需要实现类似的功能tableView(_:didDeselectRowAt:)才能返回颜色:
override func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
// change color back
}
更新: 您也可以使用setHighlighted(_:animated:)方法突出显示单元格。这样,您可以避免使用selectRowAt / didSelectRowAt / didDeselectRowAt并使用
滚动tableViewtableView?.scrollToRow(at: indexPath, at: UITableViewScrollPosition.top, animated: true).