首先你得手机要支持3D Touch (听说模拟器也能测试 3D Touch ,但是要下载一个插件,这里就不详细说了,我没有成功)
找到你的info.plist 文件 找到这个key:UIApplicationShortcutItems(如果没有的话,自己拷贝上去) Value : 选择数组
添加item
UIApplicationShortcutItemType 这个键值设置一个快捷通道类型的字符串
UIApplicationShortcutItemTitle 这个键值设置标签的标题
选填项(下面这些键值不是必须设置的):
UIApplicationShortcutItemSubtitle 设置标签的副标题
UIApplicationShortcutItemIconType 设置标签Icon类型
UIApplicationShortcutItemIconFile 设置标签的Icon文件 这个选择的话 (UIApplicationShortcutItemIconType) 会失效
UIApplicationShortcutItemUserInfo 设置信息字典(用于传值)
很简单吧 !!!!!! 这样 长按你的APP 就会出来东西了
也可以用代码实现
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[self createItem];
UIApplicationShortcutItem *item = [launchOptions valueForKey:UIApplicationLaunchOptionsShortcutItemKey];
if (item)
{
NSLog(@"We've launched from shortcut item: %@", item.localizedTitle);
} else {
NSLog(@"We've launched properly.");
} return YES;
}
-(void) createItem
{
//自定义icon的初始化方法
// UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"your_icon"];
// UIMutableApplicationShortcutItem *item0 = [[UIMutableApplicationShortcutItem alloc] initWithType:@"com.your.helloWorld" localizedTitle:@"Title" localizedSubtitle:@"sub Title" icon:icon1 userInfo:nil];
//这种是随意没有icon的
UIMutableApplicationShortcutItem *item1 = [[UIMutableApplicationShortcutItemalloc]initWithType:@"test.com.A"localizedTitle:@"我"];
UIMutableApplicationShortcutItem *item2 = [[UIMutableApplicationShortcutItemalloc]initWithType:@"test.com.B"localizedTitle:@"爱"];
UIMutableApplicationShortcutItem *item3 = [[UIMutableApplicationShortcutItemalloc]initWithType:@"test.com.C"localizedTitle:@"你"];
NSArray *addArr = @[item2,item3,item1];
//为什么这两句话可以不用,因为我们可以在plist里面加入 UIApplicationShortcutItems
// NSArray *existArr = [UIApplication sharedApplication].shortcutItems;
// [UIApplication sharedApplication].shortcutItems = [existArr arrayByAddingObjectsFromArray:addArr];
[UIApplicationsharedApplication].shortcutItems = addArr;
#pragma mark - 点击事件这里写
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler {
// react to shortcut item selections
NSLog(@"A shortcut item was pressed. It was %@.", shortcutItem.localizedTitle);
}
接着这里要说的是 在 长按touch ViewController 弹出 自定义的ViewContoller
首先 在 ViewController.m 里面加入(这个就是要手指 长按并且要往下压的ViewController)
if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
[self registerForPreviewingWithDelegate:self sourceView:self.view]; //给view增加touch 事件
NSLog(@"3D Touch 可用!");
}
else {
NSLog(@"3D Touch 无效");
}
UIViewControllerPreviewingDelegate //记得写哟
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)context viewControllerForLocation:(CGPoint) point
{
NSIndexPath * indexPath;
HWIMHomeView * homeView = context.sourceView;
indexPath = homeView.numMessage.indexPath;/ 我是把 index 给cell 了;
HWLog(@" indexPath = %@",indexPath);
UIViewController * vc = [self touchPeek:indexPath];//根据index 返回的vc 自己写吧!!!!
vc.preferredContentSize = CGSizeMake(SCREENWIDTH,SCREENHEIGHT - 150); //改变peek 出来的VC 的大小
return vc;
}
#pragma mark - 用力按
- (void)previewingContext:(id <UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit
{
HWLog(@"啥时候走呢");
viewControllerToCommit.hidesBottomBarWhenPushed =YES;
[selfshowViewController:viewControllerToCommitsender:self];
}
当弹出自定义的viewcontroller 之后 然后我们往上移动那么就会出现Action
这代码是写在viewcontroller 里面的
- (NSArray<id<UIPreviewActionItem>> *)previewActionItems{
NSString * temp =@"";
if (self.sessionPO.isTop) {
temp = HWLocalizedString(@"取消置顶",nil);
} else {
temp = HWLocalizedString(@"置顶",nil);
}
UIPreviewAction *p1 =[UIPreviewActionactionWithTitle:tempstyle:UIPreviewActionStyleDefaulthandler:^(UIPreviewAction *_Nonnull action, UIViewController *_Nonnull previewViewController) {
self.sessionPO.isTop = !self.sessionPO.isTop;
}];
UIPreviewAction *p2 =[UIPreviewActionactionWithTitle:HWLocalizedString(@"删除",nil)style:UIPreviewActionStyleDefaulthandler:^(UIPreviewAction *_Nonnull action, UIViewController *_Nonnull previewViewController) {
[[IMChatAdapterdefaultManager]removeRecentSession:self.sessionPO.sessionid];
}];
UIPreviewAction *ce1 =[UIPreviewActionactionWithTitle:HWLocalizedString(@"删除",nil)style:UIPreviewActionStyleDefaulthandler:^(UIPreviewAction *_Nonnull action, UIViewController *_Nonnull previewViewController) {
[[IMChatAdapterdefaultManager]removeRecentSession:self.sessionPO.sessionid];
}];
UIPreviewAction *ce2 =[UIPreviewActionactionWithTitle:HWLocalizedString(@"删除",nil)style:UIPreviewActionStyleDefaulthandler:^(UIPreviewAction *_Nonnull action, UIViewController *_Nonnull previewViewController) {
[[IMChatAdapterdefaultManager]removeRecentSession:self.sessionPO.sessionid];
}];
UIPreviewActionGroup * groupedActions = [UIPreviewActionGroupactionGroupWithTitle:@"就想看看能出来不"style:UIPreviewActionStyleDestructiveactions:@[ce1,ce2]];
NSArray *actions = @[p1,p2,groupedActions];
return actions;
}
}