Peek-and-Pop UIView, чтобы показать SFSafariViewController - PullRequest
0 голосов
/ 10 июля 2019

У меня есть UITableView, и в каждой ячейке есть UIView, добавленное как подпредставление.В настоящее время у меня есть UITapGestureRecognizer, чтобы открывать In-App-Safari всякий раз, когда я нажимаю на один из этих UIViews.Однако я изо всех сил пытаюсь реализовать пример кода Apple функции просмотра и всплытия для принудительного прикосновения.Мой код выглядит следующим образом:

 @IBOutlet var mainTableView: UITableView!

в viewDidLoad () :

 registerForPreviewing(with: self as! UIViewControllerPreviewingDelegate, sourceView: mainTableView)

после viewDidLoad () :

 func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
            // First, get the index path and view for the previewed cell.
        guard let indexPath = tableView.indexPathForRow(at: location),
              let cell = tableView.cellForRow(at: indexPath)
              else { return nil }

 //Enable blurring of other UI elements, and a zoom in animation while peeking.

 previewingContext.sourceRect = cell.frame

 //Create and configure an instance of the color item view controller to show for the peek.

 guard let url = someURL else { return nil }
            let vc = SFSafariViewController(url: url)
            vc.delegate = self as SFSafariViewControllerDelegate

            return vc
        }

        func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) 
{

//Push the configured view controller onto the navigation stack.

 navigationController?.pushViewController(viewControllerToCommit, animated: true)
}

Xcode возвращает ошибки, такие как

Полученное событие давления памяти 4 Вм давления 1

и

Завершение приложенияиз-за неперехваченного исключения NSInvalidArgumentException, причина: '- [ViewController previewingContext: viewControllerForLocation:]: нераспознанный селектор, отправленный экземпляру

Я не нашел решения для просмотра и публикации веб-контента при нажатииUIView.

1 Ответ

0 голосов
/ 10 июля 2019

Хорошо, я обнаружил, что просто забыл добавить UIViewControllerPreviewingDelegate в свой класс:

class MyViewController: UITableViewController, UIViewControllerPreviewingDelegate, SFSafariViewControllerDelegate

Просмотр работает, как и предполагалось, с указанным методом, но чтобы всплывающее окно работало, мне пришлось адаптировать мою последнюю функцию:

    func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) {
    show(viewControllerToCommit, sender: self)
}
...