Как заблокировать выбор стикера в iMessage
Я пытаюсь сделать очень простое приложение iMessage для наклеек, чтобы пользователю предлагалось сделать покупку в приложении, когда они нажимают на некоторые наклейки.
У меня есть собственный контроллер представления, который реализует UIViewController
, UICollectionViewDelegate
, UICollectionViewDataSource
(источник: https://github.com/jelenakrmar/customStickerApp).
Сейчас я пытаюсь переопределить поведение по умолчанию, когда пользователь касается или снимает наклейку.
Моя первая попытка была на уровне collectionView
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
// open the in-app purchase window
}
но это не работает
Может быть, мне нужно продлить MSStickerView
и сделать что-нибудь вdidTap
' а также 'didLongPress
".
У кого-нибудь есть опыт переопределения поведения iMessage при выборе стикера?
2 ответа
Кажется, если ваш UICollectionViewCell
имеет MSStickerView
(или, возможно, импорт Messages
рамки), то didSelectItemAt
делегат не вызывается.
Например, если бы я хотел иметь расширение стикера со свободными и заблокированными стикерами, я бы создал две разные ячейки в своем UICollectionView
, Один имеет MSStickerView
а второй имеет только UIImageView
, Если нажать на бесплатную наклейку, iOS обрабатывает все с помощью UICollectionView
делегат не уволен. Однако, если пользователь коснется заблокированной наклейки, делегат сработает и может быть обработан didSelectItemAt
делегировать.
Я не нашел никакой документации, которая бы указала на это.
Я нахожусь в подобной ситуации, и у меня UICollectionController загружает наклейки через MSStickerView в моем UICollectionViewCell.
Я подклассифицировал UICollectionViewCell и поместил MSStickerView в ячейку contentView. После этого я отключил сенсорный по:
(stickerView)?.isUserInteractionEnabled = false
Функция collectionViewController didSelectItemAt
в настоящее время работает.