Выполните следующие шаги, чтобы получить пользовательские элементы при длительном нажатии.
Вставьте приведенный ниже код в метод viewDidload let reply = UIMenuItem (title: "Reply", action: #селектор (MessageCollectionViewCell.reply (_ :))) let edit = UIMenuItem (title: "Edit", action: #selector (MessageCollectionViewCell.edit (_ :))) let forward = UIMenuItem (title: "Forward", action: #селектор (MessageCollectionViewCell.forward (_ :))) UIMenuController.shared.menuItems = [ответить, изменить, переслать] UIMenuController.shared.update ()
расширение для пользовательского расширения ячейки MessageCollectionViewCell{
@ objc func reply (_ sender: Any?) {// Получить collectionView, если let collectionView = self.superview as?UICollectionView {// Получить indexPath, если let indexPath = collectionView.indexPath (for: self) {// Триггерное действие collectionView.delegate? .CollectionView? (CollectionView, executeAction: #selector (MessageCollectionViewCell.reply (_ :)), forItemAt: indexPath, withSender: sender)}}}
@ objc func edit (_ sender: Any?) {// Получить collectionView, если let collectionView = self.superview as?UICollectionView {// Получить indexPath, если let indexPath = collectionView.indexPath (for: self) {// Триггерное действие collectionView.delegate? .CollectionView? (CollectionView, executeAction: #selector (MessageCollectionViewCell.edit (_ :)), forItemAt: indexPath, withSender: sender)}}}
@ objc func forward (_ sender: Any?) {// Получить collectionView, если let collectionView = self.superview as?UICollectionView {// Получить indexPath, если let indexPath = collectionView.indexPath (for: self) {// Триггерное действие collectionView.delegate? .CollectionView? (CollectionView, executeAction: #selector (MessageCollectionViewCell.forward (_ :)), forItemAt: indexPath, withSender: sender)}}}
}
Добавьте этот код в свой контроллер, в моем случае при этом (класс ChatViewController: MessagesViewController {})
// ---------------------------------------------------------------------------------------- // MARK: - обрабатывать длительное нажатие // ---------------------------------------------------------------------------------------- переопределить func collectionView (_ collectionView: UICollectionView, shouldShowMenuForItemAt indexPath: IndexPath) -> Bool {вернуть true}
переопределитьfunc collectionView (_ collectionView: UICollectionView, canPerformAction action: Selector, forItemAt indexPath: IndexPath, withSender sender: Any?) -> Bool {print (action.description) let message = messages [indexPath.section] // let message = messagesDataSource.messageForItem (at: indexPath, in: messagesCollectionView)
if action == NSSelectorFromString("reply:") {
return true
}
else if action == NSSelectorFromString("edit:") {
return true
}
else if action == NSSelectorFromString("forward:") {
return true
}
else {
return super.collectionView(collectionView, canPerformAction: action, forItemAt: indexPath, withSender: sender)
}
}
переопределить func collectionView (_ collectionView: UICollectionView, executeAction action: Selector, forItemAt indexPath: IndexPath, witОтправитель hSender: Любой?) {
if action == NSSelectorFromString("reply:") {
print("reply item here!!")
}
else if action == NSSelectorFromString("edit:") {
print("edit item here!!")
}
else if action == NSSelectorFromString("forward:") {
print("forward item here!!")
}
else {
super.collectionView(collectionView, performAction: action, forItemAt: indexPath, withSender: sender)
}
}