Как использовать peek и pop для выбора строки UITableView, когда появляется меню относительно местоположения выбранной строки? - PullRequest
0 голосов
/ 17 апреля 2020

Требование : у меня есть вид таблицы, и когда пользователь сильно нажимает на строку, мне нужно маленькое меню размера (высота: 117, ширина: 159) для всплывающего окна относительно этой строки. Меню содержит 2 варианта: «Добавить усилие» и «Просмотр». При нажатии на любой из этих элементов новый контроллер представления выдвигается.

Вывод, полученный моим кодом : при сильном нажатии строки меню увеличивается, а когда я продолжаю нажимать сильнее Контроллер вида, где я кодировал меню, помещается с черным фоном и маленьким меню в центре. Я хочу, чтобы меню оставалось там, где его размер желателен, фон прозрачен, а местоположение закрыто для выбранной строки, чтобы я мог выполнять действия кнопок этого меню.

Ожидаемый результат:

Expected output

Ниже мой код:

class POListVC: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    if self.traitCollection.forceTouchCapability == .available {
        registerForPreviewing(with: self, sourceView: tableView)
    }
} 


extension POListVC: UIViewControllerPreviewingDelegate {

    func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {

        if let indexPath = tableView.indexPathForRow(at: location), let cell = tableView.cellForRow(at: indexPath) {
            previewingContext.sourceRect = tableView.convert(cell.frame, to: self.tableView)
            guard let detailViewController = storyboard?.instantiateViewController(withIdentifier: "POMenuVC") as? POMenuVC else {
                return nil
            }
            detailViewController.preferredContentSize = CGSize(width: 159, height: 117)
            return detailViewController
        }
        return nil
    }

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

        show(viewControllerToCommit, sender: self)
    }
}

И это как выглядит POMenuV C на раскадровке:

POMenuVC on storyboard

Но результат, который я получаю, когда сильно нажимаю на строку ниже:

Output when pressed hard on row

И когда я нажимаю сильнее, контроллер вида толкается. Ниже приводится вывод:

enter image description here

...