美文网首页
IOS中3DTouch在tableView中的使用

IOS中3DTouch在tableView中的使用

作者: 向日葵的夏天_summer | 来源:发表于2017-11-29 17:16 被阅读0次

    一 使用场景

    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]
    }
    
    
    }
    

    相关文章

      网友评论

          本文标题:IOS中3DTouch在tableView中的使用

          本文链接:https://www.haomeiwen.com/subject/kqcpbxtx.html