Невозможно добавить цель с параметрами в кнопке CollectionViewCell (Swift 4)
В моем CollectionViewCell есть кнопка, и я хотел бы вызвать UIActivityViewController (с передачей URL-адреса) при нажатии кнопки.
Я пытаюсь добавить цель (с параметром) к кнопке, которая находится в CollectionViewCell, но кажется, что это не работает, вот мои коды:
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: verticalCellId, for: indexPath) as! VerticalCellId
if let articleURL = self.card?[indexPath.item]._uRLAddress {
cell.shareButton.addTarget(self, action: #selector(shareButtonPressed(sharedURL: articleURL)), for: .touchUpInside)
}
}
@objc func shareButtonPressed(sharedURL: String) {
let shareText = sharedURL
let activityViewController : UIActivityViewController = UIActivityViewController(activityItems: [shareText], applicationActivities: nil)
activityViewController.popoverPresentationController?.sourceView = self.view
self.present(activityViewController, animated: true, completion: nil)
}
Ошибка: Argument of '#selector' does not refer to an '@objc' method, property, or initializer
Это просто хорошо работает, когда параметры не передаются, вот так:
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: verticalCellId, for: indexPath) as! VerticalCellId
if let articleURL = self.card?[indexPath.item]._uRLAddress {
cell.shareButton.addTarget(self, action: #selector(shareButtonPressed), for: .touchUpInside)
}
}
@objc func shareButtonPressed() {
let shareText = NSLocalizedString("Share our app with friends.", comment: "share")
let activityViewController : UIActivityViewController = UIActivityViewController(activityItems: [shareText], applicationActivities: nil)
activityViewController.popoverPresentationController?.sourceView = self.view
self.present(activityViewController, animated: true, completion: nil)
}
Любое предложение будет оценено.
1 ответ
Решение
Вы не можете передать произвольный параметр в селектор цели / действия.
Поддерживаемые формы
- Без параметров
- Один параметр, который должен быть отправителем действия (
shareButtonPressed(_ sender: UIButton)
) - Немного
UIControl
пункты позволяют также дополнительныйUIControlEvents
параметр.