3D Peek и POP в Swift

Я пытаюсь реализовать 3D Touch Peek и Pop в своем быстром коде. Когда пользователь нажимает глубже в предварительном просмотре, появляется ряд действий предварительного просмотра (Поделиться, Обновить, Удалить).

Что мне нужно, так это то, что когда пользователь выбирает действие «Обновить», оно переходит к контроллеру UpdateView, но оно продолжает падать.

Вот мой код:

ГлавнаяPeakViewController.swift

let item3 = UIPreviewAction(title: "Update", style: .Default) { (action:UIPreviewAction, vc:UIViewController) -> Void in
        print("Update")

        let nb:BookAppointmentViewController = BookAppointmentViewController(nibName: "BookAppointmentViewController", bundle: nil)

        let root = UIApplication.sharedApplication().keyWindow?.rootViewController
        root?.presentViewController(nb, animated: true, completion: nil)

Метод POP в HomeViewController.swift

func previewingContext(previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController) {

        let Homepeak = HomePeakViewController()
        showViewController(Homepeak, sender: self)

    }

Я также попробовал этот код, чтобы перейти на экран обновления, но он выдает мне (фатальная ошибка: неожиданно найден ноль при развертывании необязательного значения).

var top = UIApplication.sharedApplication().keyWindow?.rootViewController

            let test = AppointmentDetailsViewController()
            top!.presentViewController(test, animated: true, completion: {})

person Clever mind    schedule 22.03.2016    source источник


Ответы (1)


Возможно, вам нужно иметь дело с делегациями:

Например:

extension MainViewController: UIViewControllerPreviewingDelegate {

    func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
        if #available(iOS 9.0, *) {
            previewingContext.sourceRect = myButton!.bounds //optional
        }

        let homePeakViewController = UIStoryboard.homePeakViewController()
        homePeakViewController.delegate = self

        return homePeakViewController
    }


    func previewingContext(previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController) {
        let balanceViewController = viewControllerToCommit as! HomePeakViewController
        navigationController?.pushViewController(balanceViewController, animated: true)
    }

}

extension MainViewController: HomePeakViewControllerDelegate {

    func homePeakViewControllerUpadateActionTapped() {
      let bookAppointmentViewController = let nb:BookAppointmentViewController = BookAppointmentViewController(nibName: "BookAppointmentViewController", bundle: nil)
      navigationController?.pushViewController(bookAppointmentViewController, animated: true) //present as you want
    }

}

protocol HomePeakViewControllerDelegate {
  func homePeakViewControllerUpadateActionTapped()
}

class HomePeakViewController {

  var delegate: HomePeakViewControllerDelegate?

  @available(iOS 9.0, *)
  override func previewActionItems() -> [UIPreviewActionItem] {
    let item3 = UIPreviewAction(title: "Update", style: .Default) { (action:UIPreviewAction, vc:UIViewController) -> Void in
      delegate?.homePeakViewControllerUpadateActionTapped()
    }

    return [item3]
  }

}
person Klevison    schedule 23.03.2016