3Dtouch 的实际应用详解(tableView中的应用)

3D touch也出了很长时间了,这次花时间好好研究了一下,把经验与大家分享一下

  1. 主界面重按APP图标,弹出Touch菜单

  1.1静态快速选项

   (iOS数组)给APP指定静态主屏幕的快速选项,这个键包含了一个字典数组,每个字典包含关于一个快速选项的详细信息。你可以指定静态快速选项给你的APP用一个字典数组。

  

   UIApplicationShortcutItems (iOS数组)给APP指定静态主屏幕的快速选项,这个键包含了一个字典数组,每个字典包含关于一个快速选项的详细信息。你可以指定静态快速选项给你的APP用一个字典数组。

静态定义快速在运行时常用的key:

UIApplicationShortcutItemType (必须使用) 用来区分与其他快速选项的分类

UIApplicationShortcutItemTitle (必须使用) 快速选项显示的标题

UIApplicationShortcutItemSubtitle 快速选项显示的子标题

UIApplicationShortcutItemIconType 图片类型由系统提供( iOS9.1之后新添加了许多图片类型)

UIApplicationShortcutItemIconFile 自定义的图标

UIApplicationShortcutItemUserInfo 附加信息

  2.动态快速选项

  在AppDelegate中实现以下代码

1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
2     UIApplicationShortcutItem * item = [[UIApplicationShortcutItem alloc]initWithType:@"two" localizedTitle:@"搜索楼盘" localizedSubtitle:@"一步到达指定楼盘" icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeSearch] userInfo:nil];
3     UIApplicationShortcutItem * item1 = [[UIApplicationShortcutItem alloc]initWithType:@"three" localizedTitle:@"附近楼盘" localizedSubtitle:@"快来领路费吧" icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeMarkLocation] userInfo:nil];
4
5     [UIApplication sharedApplication].shortcutItems = @[item,item1];

  3.选择item后触发的方法

  

 1 - (void)application:(UIApplication *)application performActionForShortcutItem:(nonnull UIApplicationShortcutItem *)shortcutItem completionHandler:(nonnull void (^)(BOOL))completionHandler{
   //通过shortcutItem.type来判断点击的是哪一个item,来进行不同的操作2     if ([shortcutItem.type isEqualToString:@"one"]) {
 3          UITabBarController *mytab = (UITabBarController*)self.window.rootViewController;
 4         mytab.selectedIndex = 0;
 5     }else if ([shortcutItem.type isEqualToString:@"two"]){
 6         SearchVC *searchVC = [[SearchVC alloc]init];
 7         UITabBarController *mytab = (UITabBarController*)self.window.rootViewController;
 8         UINavigationController *myNAV = [mytab.viewControllers firstObject];
 9         [myNAV pushViewController:searchVC animated:YES];
10       //  [self.window.rootViewController presentViewController:searchVC animated:YES completion:nil];
11     }else{
12         FPHNearbyVC *vc = [[FPHNearbyVC alloc] init];
13         UITabBarController *mytab = (UITabBarController*)self.window.rootViewController;
14         UINavigationController *myNAV = [mytab.viewControllers firstObject];
15         vc.hidesBottomBarWhenPushed = YES;
16         [myNAV pushViewController:vc animated:YES];
17     }
18     completionHandler(YES);
19 }

  4.APP内部peek和pop的使用(以tableView中的使用为例)

  首先遵守协议UIViewControllerPreviewingDelegate

  检测是否有3Dtouch;

 1 - (void)check3DTouch{
 2     if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable)
 3     {
 4         NSLog(@"3D Touch 开启");
 5
 6        }
 7     else{
 8
 9     }
10 }

  下面来实现相应的代理方法

//peek的代理方法,轻按即可触发弹出vc 1 - (UIViewController *)previewingContext:(id <UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location{
 2      NSIndexPath *indexPath = [_tableView indexPathForCell:(UITableViewCell* )[previewingContext sourceView]];
 3    //通过[previewingContext sourceView]拿到对应的cell;  
 4     NewVC *vc = [[FPHNewHouseDetailVC alloc] init];
 5     newModel *model= [_tableView objectAtIndex:indexPath.row];
 6     vc.pid = house.id;
 7
 8     NSLog(@"%@",location);
 9     return vc;
10 }//pop的代理方法,在此处可对将要进入的vc进行处理,比如隐藏tabBar;
11 - (void)previewingContext:(id <UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit
12 {
13     viewControllerToCommit.hidesBottomBarWhenPushed = YES;
14     [self showViewController:viewControllerToCommit sender:self];
15 }

  注意:tableView在

    - (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

  方法中一定要对每个cell进行注册代理方法如下

  [self registerForPreviewingWithDelegate:self sourceView:cell];

5.预览时底部菜单的添加

在要预览的VC中添加以下代码:

 1 -(NSArray<id<UIPreviewActionItem>> *)previewActionItems
 2 {
 3     UIPreviewAction * action1 = [UIPreviewAction actionWithTitle:@"标题1" style:1 handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
 4         NSLog(@"标题1");
 5     }];
 6
 7     UIPreviewAction * action2 = [UIPreviewAction actionWithTitle:@"标题2" style:0 handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
 8       NSLog(@"标题2");
 9
10     }];
11     UIPreviewAction * action3 = [UIPreviewAction actionWithTitle:@"标题3" style:2 handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
12         NSLog(@"标题3");
13     }];
14
15     NSArray * actions = @[action1,action2,action3];
16
17     return actions;
18 }

    block里面直接写点击后要实现的操作

最终效果:

时间: 2024-11-10 10:29:04

3Dtouch 的实际应用详解(tableView中的应用)的相关文章

详解Android中那些酷炫返回方式的实现

Android手机都会有返回键,不管是实体键,还是虚拟键.Android用户主要也都是通过这个返回键操控页面返回方式的,不比IOS逼格甚高的只保留一个操作键.这种方式是最普遍的返回方式,还有一种也是比较常见的,那就是页面内部自己响应.绝大多数APP每个页面的设计图顶部左侧都会有一个返回键图标,偶尔也有奇葩的设计放在底部左侧,点击这个图标即finish掉当前页面.简单的介绍完了最常见的两种方式,下面为大家介绍两种更友好的交互方式. 拿大家比较常用的三款社交软件的交互来说.腾讯微博的返回方式除去上述

CSS学习笔记(9)--详解CSS中:nth-child的用法

详解CSS中:nth-child的用法 前端的哥们想必都接触过css中一个神奇的玩意,可以轻松选取你想要的标签并给与修改添加样式,是不是很给力,它就是":nth-child". 下面我将用几个典型的实例来给大家讲解:nth-child的实际用途: Tips:还用低版本的IE浏览器的哥们请绕过! :nth-child(2)选取第几个标签,"2可以是你想要的数字" .demo01 li:nth-child(2){background:#090} :nth-child(n

详解HTTP中get和post的区别

1.详解HTTP中GET和POST的区别 http://www.jellythink.com/archives/806 2.HTTP 方法:GET 对比 POST http://www.cnblogs.com/liu-ke/p/4198815.html

详解mysql中的Using与On的用法

多用才可以体会各个关键字的用法啊... 原文来自[http://bbs.php100.com/read-htm-tid-148469.html] 在用Join进行多表联合查询时,我们通常使用On来建立两个表的关系.其实还有一个更方便的关键字,那就是Using.那么这两个关键字在使用上有啥区别呢?往下看.假设有如下两张表:    mysql> select * from pets; +---------+---------+--------+-----------+ | pets_id | ani

详解Webwork中Action 调用的方法

详解Webwork中Action 调用的方法 从三方面介绍webwork action调用相关知识: 1.Webwork 获取和包装 web 参数 2.这部分框架类关系 3.DefaultActionProxyFactory.DefaultActionProxy.DefaultActionInvocation 终于要开始 webwork 核心业务类的总结,webwork 通过对客户端传递的 web 参数重新包装,进行执行业务 Action 类,并反馈执行结果,本篇源码分析对应下图 WebWork

实例详解 EJB 中的六大事务传播属性--转

前言 事务 (Transaction) 是访问并可能更新数据库中各种数据项的一个程序执行单元 (unit).在关系数据库中,一个事务可以是一条或一组 SQL 语句,甚至整个程序.它有通常被称为 ACID 的原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持续性(Durability)四大特性: 原子性(Atomicity):一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做. 一致性(Consistency):事务必须是使数据库

一张图详解Linux中的top命令

一张图详解Linux中的top命令及每个参数的含义:

图文详解Unity3D中Material的Tiling和Offset是怎么回事

图文详解Unity3D中Material的Tiling和Offset是怎么回事 Tiling和Offset概述 Tiling表示UV坐标的缩放倍数,Offset表示UV坐标的起始位置. 这样说当然是隔靴搔痒. 下面用*.3ds文件作为模型,介绍Tiling和Offset到底是怎么回事. 3DS格式解析 比如我有这样一个tank_player.3ds模型.右侧的'select'处的图片就是贴图. *.3ds文件最基本的内容包括顶点列表Vertices.贴图坐标列表UVs.面列表Faces.其中Ve

详解Android中的屏幕方向

详解Android中的屏幕方向 屏幕方向 是对Activity而言的,所以你可以在AndroidManifest.xml 文件中,通过<activity> 标记的screenOrientation 属性进行设定,例如: <activity android:name=".SketchpadActivity" android:screenOrientation="landscape"/><!--让该Activity总是显示为横屏-->