Swift如何正确覆盖3D-Touch功能?

时间:2016-09-07 16:11:50

标签: ios swift 3dtouch

我目前正在尝试在自己的小应用中实现3D触控。该应用程序类似于学校规划器,因此主视图Controller是一个UITableViewController,在表视图中有一些课程,当点击其中一个时,会出现一个segue,并将活动视图控制器更改为&# 39; DetailedViewController' .swift。到目前为止一切都有效。但是现在我正在尝试实施3D-Touch,以便用户可以按下课程#39;更难以预览特定课程。我的第一个尝试是在故事板的segue中设置复选标记。它实际上显示了预览,但我想在预览下添加一些动作,并给它一个标题。所以我尝试实现UIViewControllerPreviewingDelegate协议并创建我的自定义函数。

但从那时起,我不知道如何继续。

我的职能:

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.leftBarButtonItem = self.editButtonItem()
    // .... Some other irrelevant stuff
    registerForPreviewingWithDelegate(self, sourceView: view)
}

 func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
    if let indexPath = tableView.indexPathForRowAtPoint(location) {
        //This will show the cell clearly and blur the rest of the screen for our peek.
        previewingContext.sourceRect = tableView.rectForRowAtIndexPath(indexPath)
    }
    return nil
}

func previewingContext(previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController) {
    presentViewController(viewControllerToCommit, animated: true, completion: nil)
}

override func previewActionItems() -> [UIPreviewActionItem] {
    print("previewActionItems")
    let action = UIPreviewAction(title: "Press Me!", style: .Default) { (action, viewController) in
        print("I believe I can fly")
    }
    return [UIPreviewAction](arrayLiteral: action)
}

我的班级:

初始视图控制器是MainTableViewController。上面显示的所有函数都写在这个类中。

更详细的视图控制器是DetailedViewController。

谢谢你的回答!

1 个答案:

答案 0 :(得分:0)

override var previewActionItems: [UIPreviewActionItem] {

    let action1 = UIPreviewActionGroup(title: NSLocalizedString("action1", comment: "action1"), style: .default, actions: someAction)

    let action2 = UIPreviewAction(title: "action2", style: .default) {[unowned self] (action, viewController) in
        print("action2")
    }

    return [action1, action2]
}