Невозможно добавить цель с параметрами в кнопке 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 параметр.
Другие вопросы по тегам