IOS中3DTouch在tableView中的使用

一 使用场景

3DTouch在IOS应用中,主要有2种功能:
1 主屏幕上Icon快捷功能;

2 App内页面中的使用;

二 在APP中TableView中的使用

* 判断是否支持3DTouch

在使用之前,首先要判断当前设备是否支持3DTouch功能,不然可能造成崩溃,在使用3DTouch功能的控制器中这样判断:

if traitCollection.forceTouchCapability == .available {
        registerForPreviewing(with: self, sourceView: cell)
    }
* 设置代理,遵守协议,实现协议中需要实现的方法
 extension TouchTableViewController: UIViewControllerPreviewingDelegate {
func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
    if let index = tableView.indexPath(for: previewingContext.sourceView as! UITableViewCell) {
        let item = self.items[index.row] + "\(index.row + 1)"
        let touchDetail = TouchDetailViewController()
        touchDetail.item = item
        return touchDetail
    }
    return nil
}

func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) {
    self.navigationController?.pushViewController(viewControllerToCommit, animated: true)        
}
}
* 设置上滑预览时快捷选项

然后在第二个控制器中,可以设置预览快捷键:

 override var previewActionItems: [UIPreviewActionItem] {
    let action1 = UIPreviewAction(title: item, style: .default) { [weak self](_, vc) in
        print(self?.item ?? "")
    }
    return [action1]
}
* 所有代码
//
//  TouchTableViewController.swift
//  Demo
//
//  Created by 王云 on 2017/11/29.
//  Copyright © 2017年 王云. All rights reserved.
//

import UIKit

class TouchTableViewController: UITableViewController {

var items: [String] = ["你今天很漂亮----", "你今天很漂亮----", "你今天很漂亮----", "你今天很漂亮----", "你今天很漂亮----", "你今天很漂亮----", "你今天很漂亮----", "你今天很漂亮----", "你今天很漂亮----", "你今天很漂亮----", "你今天很漂亮----", "你今天很漂亮----", "你今天很漂亮----", "你今天很漂亮----", "你今天很漂亮----", "你今天很漂亮----", "你今天很漂亮----", "你今天很漂亮----", "你今天很漂亮----", "你今天很漂亮----"]

    override func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = UIColor.white
    tableView.register(UITableViewCell.self, forCellReuseIdentifier: "TouchCellID")
}


// MARK: - Table view data source

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return items.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "TouchCellID", for: indexPath)
    cell.textLabel?.text = items[indexPath.row] + "\(indexPath.row + 1)"
    if traitCollection.forceTouchCapability == .available {
        registerForPreviewing(with: self, sourceView: cell)
    }
    return cell
}

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 50
}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let item = self.items[indexPath.row] + "\(indexPath.row + 1)"
    pushToTouchDetail(item: item)
}

func pushToTouchDetail(item: String) {
    let touchDetail = TouchDetailViewController()
    touchDetail.item = item
    self.navigationController?.pushViewController(touchDetail, animated: true)
}

}

extension TouchTableViewController: UIViewControllerPreviewingDelegate {
func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
    if let index = tableView.indexPath(for: previewingContext.sourceView as! UITableViewCell) {
        let item = self.items[index.row] + "\(index.row + 1)"
        let touchDetail = TouchDetailViewController()
        touchDetail.item = item
        return touchDetail
    }
    return nil
}

func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) {
    self.navigationController?.pushViewController(viewControllerToCommit, animated: true)        
}
}

在第二个控制器中:

//
//  TouchDetailViewController.swift
//  Demo
//
//  Created by 王云 on 2017/11/29.
//  Copyright © 2017年 王云. All rights reserved.
//

import UIKit

class TouchDetailViewController: UIViewController {

var item: String!

fileprivate var titleLabel: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.title = "TouchDetail"
    view.backgroundColor = UIColor.white
    setupUI()
    
    if let item = item {
        titleLabel.text = item
    }
    
}

func setupUI() {
    titleLabel = UILabel()
    titleLabel.textAlignment = .center
    titleLabel.textColor = UIColor.darkGray
    titleLabel.font = UIFont.systemFont(ofSize: 20)
    view.addSubview(titleLabel)
    
    titleLabel.snp.makeConstraints { (make) in
        make.centerX.equalToSuperview()
        make.centerY.equalToSuperview()
    }
}

override var previewActionItems: [UIPreviewActionItem] {
    let action1 = UIPreviewAction(title: item, style: .default) { [weak self](_, vc) in
        print(self?.item ?? "")
    }
    return [action1]
}


}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,982评论 25 708
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,198评论 4 61
  • Say you have an array for which the i th element is the p...
    juexin阅读 155评论 0 0
  • 陈排,因强直性脊柱炎在训练中倒下了。 陈排的从小的梦想是当一名特战队员,所以他一直为了梦想努力,他成为了侦察连的一...
    魏道道女王阅读 416评论 0 3
  • r总感觉周围人的生活肯定很精彩,他们一定认识一群很有趣的人,日子一定充满欢乐。那种叫做忧愁的东西,他们肯定一点也不...
    羥羊阅读 231评论 0 2