我在iPhone 6s上的UITableViewController
中添加了一些测试3D Touch
功能。总体来说,它运行良好,但我发现了两个问题,并不确定发生了什么以及如何以正常的方式进行修复。
1)我的单元格是可选择的,所以用户可以按下它或使用“3D Touch”。问题在于,当我对UITableViewCell
使用“Pop”和“Peek”时,它会变成选定状态,并且我无法使用setSelected:
或setHighlighted:
方法以正常的方式取消选择它。我尝试在不同的位置中取消选择甚至在previewingContext:commitViewController
和presentViewController
完成中。它们什么也没做,单元格仍保持选定状态。我通过调用reviewingContext.sourceView
和其他临时代码来检索选定的单元格,但这些方法都没有起作用。
- 因此问题是:是否有一种正常的方法可以在用户对其应用“Pop”压力时取消选择(或更好地不选择)单元格?
2)我还注意到,有时当我取消“Pop”手势并将单元格恢复到初始状态(当previewingContext:viewControllerForLocation
方法甚至未被调用时),我的UI会卡死,并且完全不响应触摸。我需要关闭应用并重新打开才能使其正常工作。这似乎非常奇怪,我检查了这个教程。它运行良好,没有提到的问题,但它们在UITableView
上注册委托方法,而不是在单元格上,因此“Pop”手势高亮整个tableView而不是单元格。
- 有什么想法,这里可能出了什么问题?
这是我如何在我的测试UITableViewController
中实现3D Touch,该控制器遵循UIViewControllerPreviewingDelegate
:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCellWithIdentifier("SomeDemoID",
forIndexPath: indexPath) as! UITableViewCell
// Some cell configuration
if #available(iOS 9.0, *) {
if traitCollection.forceTouchCapability == .Available {
self.registerForPreviewingWithDelegate(self, sourceView: cell)
}
} else { // Fallback on earlier versions}
return cell;
}
// MARK: - UIViewControllerPreviewingDelegate
func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController?
{
// Just Test View Controller
return UIViewController(nibName: nil, bundle: nil)
}
func previewingContext(previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController)
{
self.presentViewController(viewControllerToCommit, animated: true, completion: nil)
}
提前感谢您!