加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – 3D Touch和UITableViewCell

发布时间:2020-12-14 04:42:28 所属栏目:百科 来源:网络整理
导读:我在iPhone 6s上为UITableViewController添加了一些测试3D Touch功能.一般来说它工作正常,但我能够观察到一些问题,我不知道发生了什么以及如何以正常方式解决这个问题. 1)我的单元格是可选的,因此用户可以按下它或使用“3D Touch”.问题是,当我对UITableView
我在iPhone 6s上为UITableViewController添加了一些测试3D Touch功能.一般来说它工作正常,但我能够观察到一些问题,我不知道发生了什么以及如何以正常方式解决这个问题.

1)我的单元格是可选的,因此用户可以按下它或使用“3D Touch”.问题是,当我对UITableViewCell使用“Pop”和“Peek”时,它会被选中,我无法使用setSelected:或setHighlighted:方法以正常方式取消选择.我试图在不同的地方取消选择它,即使在presentingContext:presentViewController完成中的commitViewController中也是如此.他们什么都不做,细胞仍处于选定状态.我通过调用reviewingContext.sourceView和其他临时代码来检索选定的单元格,这些代码给了我选定的单元格,但这些方法不起作用.

>所以问题是当用户在其上应用“Pop”时,有一种正常的方法可以取消选择(或更好地选择)单元格吗?

2)我也注意到有时当我取消“Pop”手势并将单元格置于初始状态时(当预览窗口:viewControllerForLocation方法甚至没有被调用时)我的UI只是挂起并且根本不响应触摸.我需要杀死才能使它发挥作用.这看起来很奇怪,我检查了这个Tutorial.它工作得很好,没有提到问题,但是它们不在单元格上注册委托,而是在UITableView上,因此“Pop”手势突出显示整个tableView,但不是单元格.

>有什么想法,这里有什么不妥?

以下是我在测试UITableViewController中实现3D触摸的方法,该测试符合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)
    }

提前致谢!

解决方法

>在tableview单元格中添加3D Touch的简便方法.没有一行代码

storyboard image

>更多细节:https://github.com/yudiz-solutions/YM3DTouch

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读