我正在尝试在我自己的小应用程序中实现3D触控。该应用程序类似于学校规划器,因此主视图Controller是一个UITableViewController,在表视图中有一些课程,当点击其中一个时,会出现一个segue,并将活动视图控制器更改为'DetailedViewController '.swift。到目前为止一切都有效。但是现在我正在尝试实现3D-Touch,以便用户可以更加努力地按下“课程”来预览特定课程。我的第一个尝试是在故事板的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。上面显示的所有函数都写在这个类中。
更详细的视图控制器是详细的ViewController。
谢谢你的回答!
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]
}