ios9新特性3DTouch之简单开发初体验 + 页面跳转的个人思路

2015-12-29

官方示例

首先最直观的就是看官方的示例了。 查看官方的说明

简单的示例

有些比较心急的小伙伴想尽快上手,那么就跟着我来一起做个简单图标重按弹出快捷菜单的效果吧,好吧,官方叫做ApplicationShortcuts

  1. 先上效果图

  2. 操作步骤

    第一步:配置plist文件 (右键 open as source code) 加入下面的格式内容,有几个菜单就加个dict,这个我就不重复写了 另外各个key和value的意义我也不赘述了,无非就是 图标样式,菜单的名称,还有用户可以自定义的传递参数。

        <key>UIApplicationShortcutItems</key>
        <array>
            <dict>
                <key>UIApplicationShortcutItemIconType</key>
                <string>UIApplicationShortcutIconTypeLocation</string>
                <key>UIApplicationShortcutItemTitle</key>
                <string>查看流量</string>
                <key>UIApplicationShortcutItemType</key>
                <string>$(PRODUCT_BUNDLE_IDENTIFIER).first</string>
                <key>UIApplicationShortcutItemUserInfo</key>
                <dict>
                    <key>firstShortcutKey</key>
                    <string>firstShortcutValue</string>
                </dict>
            </dict>
        </array>
    

    第二步:就是在AppDelegate中加入下面的代码,这样当用户选择了菜单的某项后,可以在这里进行判断,跳转到某个页面也好,做些其他处理也行。

     -(void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void(^)(BOOL succeeded))completionHandler{
     //这里做判断和处理
     }
    

页面跳转的历史遗留问题

3dtouch示例就到这里结束了,还有很多其他的内容,大家参考文章开头部分的官方文档是最方便不过了,我其实写这篇文章还有个目的就是想跟大家讨论下页面跳转的方法,话说关于这个页面跳转的问题一直困扰了我很久,虽然自己用了一些笨办法可以勉强满足项目需要,但是一个觉得怪怪的,而且我当时在百度学习3dtouch的时候,很多文章基本上到了我上面示例的第二步就本上就结束了,然后很多小伙伴就会追问,怎么跳转到我想要的页面啊,我的app中tabviewcontroller,我想要去的页面要通过好几个点击步骤才能到达呢。怎么一下子就跳到这个页面呢,关键是跳转完了,我点击返回按钮到底返回到哪里呢?额,这些问题其实与3dtouch无关,但是实现点击通知打开app跳转到指定页面的功能时也遇到类似的问题,我先举个例子,然后简单说下我的思路,当然不一定是正确的,有其他方法的大神麻烦指点一二

比如我的app很简单,一个tabviewcontroller,包含三个tab每个tab绑定一个nativecontroller,然后每个nativecontroller里面就是一堆的viewcontroller,可以很方便的push来pop去,现在我最后一个tab的nativecontroller的主页面假设叫设置,设置中有个人消息,我一点击这个人消息的按钮就会push到一个消息页面。 问题来了:我在AppDelegate 中响应通知的点击事件或者响应3dtouch的菜单点击的时候,怎么跳转到上文所说的消息页面?

  1. 方法一、复用这个消息页面,不管这个消息页面以前在什么位置,藏得有多深,我点击通知时就在root的window上pop一个新的消息的页面来,用户看完了直接关掉,对当前显示的页面也没啥影响。但是呢有时候我们这个需要弹出的页面是要接收上个页面很多参数的,但是在appdelegate中很难获取到这些参数。所以这个方法也不一定都管用。

  2. 方法二、采用通知和传参数的方法,先发个通知告诉tabviewcontroller,我要切换到最后一个tab,然后第三个主页面的viewwillappear方法中判断下是否有传递参数,如果有就执行跳转到消息页面的方法。至于这个参数你怎么传递,你可以用个全局的参数,只不过这种参数你判断执行完了记得清空就行了。这个方法当app打开过了放在后台是管用的,但是app还没有打开貌似没用。这种情况下我采用的方法就是,在appdelegate中先把跳转的参数缓存起来,然后在app启动后再通过缓存的参数做判断(其实就是上面说的全局的参数)。

结语

今天借着3dtouch 的示例主要是想讨论下页面跳转的问题,上面都是个人的思路,并不代表都正确,只是某些特定情况下会解决某些问题,如果有谁有更加好的方法,望不吝赐教!敬请留言!