Как активировать расширение общего ресурса (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.