представить DocumentInteractionController внутри XIB табличного представления, содержащего collectionView - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь загрузить tableview xib, содержащий collectionView. collectionView содержит список файлов для загрузки и открытия.

class CommentsCell: UITableViewCell, UICollectionViewDelegate, UICollectionViewDataSource, UIDocumentInteractionControllerDelegate {

var dic = UIDocumentInteractionController()
var imgCollection: [TicketAttachment] = [TicketAttachment]()
@IBOutlet weak var collectionView: UICollectionView!
@IBOutlet weak var imgProfilePic: UIImageView!
@IBOutlet weak var lblName: UILabel!
@IBOutlet weak var lblDate: UILabel!
@IBOutlet weak var txvComments: UITextView!
override func awakeFromNib() {
    super.awakeFromNib()
    dic.delegate = self
    self.collectionView.dataSource = self
    self.collectionView.delegate = self
    self.collectionView.register(UINib.init(nibName: "AttachmentViewCell", bundle: nil), forCellWithReuseIdentifier: "AttachmentViewCell")
}


func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        let fileUrl = imgCollection[indexPath.row].fileUrl?.absoluteString
        let url = URL(string: Api.domain + fileUrl!)

        let destination = DownloadRequest.suggestedDownloadDestination(for: .documentDirectory)

        sharedAFManager.AFManager.download(url!, to: destination)
        .downloadProgress(closure: { _ in
            SVProgressHUD.show()
        }).response(completionHandler: { (downloadResponse) in
            SVProgressHUD.dismiss()
            self.dic.url = downloadResponse.destinationURL
            self.dic.uti = downloadResponse.destinationURL!.uti
            let rect = CGRect(x: 0, y: 0, width: 100, height: 100)
            self.dic.presentOpenInMenu(from: rect, in: self.view, animated: true)
        })
}

self.dic.presentOpenInMenu (из: rect, in: self.view, animated: true) Значение типа 'CommentsCell' не имеет члена 'view'

Конструкция Tableview XIB:

Tableview XIB design file

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Вы не можете представить OpenInMenu из UIView. Вам необходимо использовать экземпляр UIviewContoller для представления ViewController, чтобы вы могли просто передать объект View Controller в ячейку таблицы или использовать ниже Расширение uiview

extension UIView {

    var parentViewController: UIViewController? {
        var parentResponder: UIResponder? = self
        while parentResponder != nil {
            parentResponder = parentResponder!.next
            if let viewController = parentResponder as? UIViewController {
                return viewController
            }
        }
        return nil
    }

}

и представитьOpenInMenu как

self.parentViewController?.presentOpenInMenu(from: rect, in: self.view, animated: true)
0 голосов
/ 12 ноября 2018

Передайте viewController объект в UITableViewCell и замените строку на

self.dic.presentOpenInMenu(from: rect, in: vc.view, animated: true)

В ViewController:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    .....
    cell.vc = self
}

В комментариях Клетка:

class CommentsCell: UITableViewCell, UICollectionViewDelegate, UICollectionViewDataSource, UIDocumentInteractionControllerDelegate {

    weak var vc: UIViewController!

    ........

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        let fileUrl = imgCollection[indexPath.row].fileUrl?.absoluteString
        let url = URL(string: Api.domain + fileUrl!)

        let destination = DownloadRequest.suggestedDownloadDestination(for: .documentDirectory)

        sharedAFManager.AFManager.download(url!, to: destination)
            .downloadProgress(closure: { _ in
                SVProgressHUD.show()
            }).response(completionHandler: { (downloadResponse) in
                SVProgressHUD.dismiss()
                self.dic.url = downloadResponse.destinationURL
                self.dic.uti = downloadResponse.destinationURL!.uti
                let rect = CGRect(x: 0, y: 0, width: 100, height: 100)
                self.dic.presentOpenInMenu(from: rect, in: vc.view, animated: true)
            })
    }
}
...