Как активировать расширение общего ресурса (UIActivityViewController) при нажатии кнопки (которая находится в UICollectionViewController)?

Я пытаюсь добавить некоторые кнопки или метки к одному из UICollectionViewCell, но, кажется, я не смогу активировать UIActivityViewController, когда нажата кнопка "Поделиться".

Вот мои коды:

class VerticalCollectionViewCell: UICollectionViewCell {




 override init(frame: CGRect) {

    super.init(frame: frame)


    containerView.addSubview(shareButton)
    shareButton.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: -16).isActive = true
    shareButton.rightAnchor.constraint(equalTo: favoriteButton.leftAnchor, constant: -16).isActive = true
    shareButton.widthAnchor.constraint(equalToConstant: 24).isActive = true
    shareButton.heightAnchor.constraint(equalToConstant: 24).isActive = true
    shareButton.addTarget(self, action: #selector(handleShareButton), for: .touchUpInside)

}

  @objc func handleShareButton(sender: UIButton) {
        let shareText = NSLocalizedString("I found something interesting you may want to take a look at.", comment: "share")
        let shareImage = #imageLiteral(resourceName: "Bear")
        let activityViewController : UIActivityViewController = UIActivityViewController(activityItems: [shareText, shareImage as Any], applicationActivities: nil)
        activityViewController.popoverPresentationController?.sourceView = self.view
        self.present(activityViewController, animated: true, completion: nil)
    }



}

Ошибки: Value of type 'VerticalCollectionViewCell' has no member 'view' а также Value of type 'VerticalCollectionViewCell' has no member 'present',

Я знаю, что presentViewController - это метод UIViewController, в UITableViewCell нет метода с именем presentViewController, и UITableViewCell никогда не должен обрабатывать бизнес-логику. Это должно быть реализовано в контроллере представления.

Но я понятия не имею, как это исправить.

2 ответа

Решение

Вы звоните делать так

class Cell: UITableViewCell {
    @IBOutlet let shareButton: UIButton!
}
class VC: UIViewController, UITableViewDataSource {
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as? Cell {
            cell?.shareButton.addTarget(self, action: #selector(VC.shareButtonPressed(_:)), for: .touchUpInside)
        }
    }
    func shareButtonPressed(_ button: UIButton) {
        //code here

    }
}

Что вы можете сделать, так это определить протокол ячейки, которому может соответствовать ваше табличное представление. При нажатии кнопки "Поделиться" на collectionView вызвать этот метод делегата, передав соответствующую информацию, такую ​​как тег ячейки или модель для этой ячейки collectionView. Используя эту информацию, вы можете затем представить ActivityController из вашего viewController.

Другие вопросы по тегам