3D Touch tableview的应用

事过几天来写3DTouch在tableview里面的使用了,用力点击cell触发的事件,
那么我就直接开始写了

   \\\\先创建一个UITableView
var mytableview : UITableView = UITableView()

//把这个View加到当前控制器中
override func viewDidLoad() {

//调用下面的方法设置TableView
 seUI()

//Capability(能力)判断有没有3DTouch的功能
   if self.traitCollection.forceTouchCapability == UIForceTouchCapability.Available
       {
        //如果有设置3DTouch的代理,第一个参数,实现代理的控制器,第二个参数,触发3DTouch的View
        self.registerForPreviewingWithDelegate(self,sourceView:mytableview)
        print("3DTouch可用")
   }else {
        print("3DTouch不可用")
    }}


func setUI()
{
    //添加到当前View
    View.addSubview(mytableview)
    //设置frame
     mytableview.frame = view.frame
    //设置TableView的代理
     mytableview.dataSource = self
    //注册TableView的cell
    mytableview.registerClass(UITableViewCell.self, forCellReuseIdentifier: "mydcell")
}

//实现3DTouch的代理,继承协议UIViewControllerPreviewingDelegate
 extension ViewController : UIViewControllerPreviewingDelegate{

//当你点击cell的时候会出现一个演示会弹出控制器的窗口,再用力按的话会调用这个方法,必须实现
//点击后实现下面方法会进入弹出的控制器
func previewingContext(previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController) {
     self.showViewController(viewControllerToCommit, sender: self)
    }

//代理必须实现的方法返回一个点击后需要进入的控制器
//location当前点击的点
func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
     //创建一个自定义的控制器
     let con = mycontroller()
    
     //测试用,设置一下背景颜色
     con.view.backgroundColor = UIColor.orangeColor()
     //判定如果再有值的cell内
     if iscell(location){
     
     //判断当前点击的点在哪一个cell上
     let indx = mytableview.indexPathForRowAtPoint(location)

     //设置sourceRect这个属性,触发事件后,这个区域不会模糊,会有微微的放大效果
     previewingContext.sourceRect = tab.cellForRowAtIndexPath(indx!)!.frame
      
      //preferredContentSize设置控制器展示的大小(从左上角开始)
      //它会自动放大到能展示的最大尺寸
        con.preferredContentSize = CGSize(width: 375, height: 667)
    }
     //运用三木运算判定是否是有值的cell有就返回控制器没有救返回nil
    return iscell(location) ? con : nil
    }

//判断是否在有值的cell上
func iscell(point : CGPoint) -> Bool {
     let indx : NSIndexPath? = mytableview.indexPathForRowAtPoint(point)
     return indx != nil
}
}






//TableView的代理方法这里就不多讲了
extension ViewController : UITableViewDataSource
{

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
       return 10
     }

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
     let cell = tableView.dequeueReusableCellWithIdentifier("mydcell", forIndexPath: indexPath)
     cell.textLabel?.text = "第\\(indexPath.row)行"
     return cell 
  }
  }





//为了方便演示新建控制器我就写在这里面了


class mycontroller : UIViewController {
override func viewDidLoad() {
}

//重写下面这个方法后,弹出展示窗口时就可以向上滑动了,并且下面会出现 你创建的功能键,这个方法需要返回一个UIPreviewActionItem的数组
override func previewActionItems() -> [UIPreviewActionItem] {
    
   //创建功能键UIPreviewAction,这里的功能键和UIAlertAction的创建方法差不多
   //创建时里面的block会把你点击的这个avtion和当前控制器返回给你
    let avtion = UIPreviewAction(title: "猜猜我是谁", style: UIPreviewActionStyle.Default) { (action, controller) -> Void in
        print("点击了我是")
    }
    let avtion2 = UIPreviewAction(title: "哎哟今天天气不错哦", style: UIPreviewActionStyle.Default) { (action,controller) -> Void in
        print("点击了\(action.title)")
    }
    
   //创建一个功能键组UIPreviewActionGroup,后面的actions时一个UIPreviewAction的数组,点击后下面的按钮会变成actions里面的按钮,这样下面的功能键虽然数量有限但其实可以加很多
    let avg = UIPreviewActionGroup(title: "哎哟不错哦", style: UIPreviewActionStyle.Default, actions: [avtion,avtion2])

    //返回你要显示的功能键
    return [avtion,avtion2,avg]
}
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,387评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,845评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,091评论 0 246
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,308评论 0 214
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,662评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,795评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,008评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,743评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,466评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,687评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,181评论 1 262
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,531评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,177评论 3 239
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,126评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,902评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,862评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,734评论 2 274

推荐阅读更多精彩内容

  • 2017.02.22 可以练习,每当这个时候,脑袋就犯困,我这脑袋真是神奇呀,一说让你做事情,你就犯困,你可不要太...
    Carden阅读 1,252评论 0 1
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,628评论 4 59
  • 文|十二匕千八页 题记在我刚刚过完十七岁生日的时候,父亲便撒手人寰。如今我马上就要三十二岁了,十五年了,我从未写过...
    十二匕千八页阅读 376评论 5 2
  • 雨后 作者:汪叶盈清露柳婆娑,深浅秋空晴色多。几处青苔绿意看,殷勤雀鸟又高歌。 雨秋点评:与汪老师神交已久,拿到此...
    随意诗社阅读 1,174评论 0 5
  • (一) 昨天我们说了,在正式开始学习番茄工作法之前,需要先明白的几个概念: 什么是一次只干一件事 这件事情是什么属...
    梁浩瀚阅读 257评论 0 0