three20-URL based Navigation

      本文是对:http://three20.info/article/2010-10-06-URL-Based-Navigation 一个简单粗糙的翻译,第一次写博客,本着学习,交流,一起进步,共同发展的良好祝愿,虽然翻译生硬,希望大家包涵,指出其中的问题!

 

      在iPhone应用程序中,导航栏有一定的挑战性-因为没有在一个既定的方法来打开一个视图并向其传递数据。大多数应用中,调用者必须知道每个视图特定的API,这种方式导致了在你的应用程序中,很多位置调用大量的引用代码来打开相同的视图。

      TTNavigator的基于URL的导航方式提供了一种标准的方式来导航用户的视图,它本身内建了一些标准的iPhone接口,比如UINavigationController,UITabBarController等。

 

      简介

      从一个简单的例子开始,通常这些要写到您的应用程序的委托的方法 applicationDidFinishLaunching:selector 中 

 

     上面的map引用到了一个类: RestaurantController 和它的一个选择器(方法):initWithName:

 

  

 

        这就从一个url建立了一个简单的映射,如果你要打开一个商店的视图,比如 Chotchkie's.

        如果使用UINavigationController,你一般会这么做:

 

  

 

       每次产生视图的时候,需要生成一个 controller对象,然后添加到UINavigationController中,然后释放。

       使用TTNavigator,只要打开URL如下: 

 

 

      openURLAction: 被调用时,一个RestaurantController对象被生成,并掉用方法initWithName,并将 @“Chotchkie's” 作为第一个参数传递给 initWithName方法。

 

      持久性

 

       使用TTNavigator一个巨大的优势,就是用户所有的导航情况自动的根据URLS来记录。这意味着,如果你一个导航控制器标签栏,TTNavigator采用“栈”方式记录用户使用openURLAction浏览过的所有url。当应用程序被再次启动时,用户可以查看上次的浏览记录。

      TTNavigator默认的历史记录方式是:TTNavigatorPersistenceModeNone,即不记录。需要调用 restoreViewControllers 来选择另外2中模式来实现记录。 在 applicationDidFinishLaunching: 方法中,可以设置记录方式:

  • TTNavigatorPersistenceModeNone - No persistence. (不记录)
  • TTNavigatorPersistenceModeTop - Persist only the first URL in the history.(应该是每次浏览的最后一个)
  • TTNavigatorPersistenceModeAll - Persist the entire history.(所有历史)
      设置方式是:


      URL 映射方法

      用2中映射方式:从URLs映射到控制器和从NSObjects映射到URLs(一般使用的是前一种),还是从简单的例子开始:

      URLs 到 控制器
      现在有一个url:"tt://menu/1",映射到一个控制器,例子如下(three20中TTNavigatorDemo实例):


     
      现在打开"tt://menu/1"会调用



      扩展成多参数的形式,如果我们要浏览MenuController的一个特定的页面:



      打开"tt://menu/1/5" 会调用方法:


      其它数据类型
      上面的例子是假设initWithMenu:原型如下:


       对于其它类型,映射会根据参数类型自动映射到对应的方法上(像C++的重载),比如:


      打开"tt://menu/lunch"将会调用:

 
      当然,咱们得定义这个方法:



      注意一个问题,我们刚才使用的map后面使用的是 toSharedViewController !

      NSObjects to URLs
      首先,让我们来看一个基础类NSObject:



      我们想要对通讯录中的每个记录对应一个表格Controller中的一个。当点击通讯录上时,我们要呈现被触摸的人的详细信息页面,使用TTTableItem,我们可以为table中每一个item对应上一个URL。
      NSObject TTURL map:


     
      调用 [aContact URLValueWithName:@"view"] 将会为aContact产生一个URL:



      这样就可以使用上面将的URL映射控制器的方式使用这个URl了。

      参数替换
     
      NSObject所有的属性都能用来生成URL,使用参数名,用括号括起来,方法: URLValueWithName 就会自动的替换。

      Native 参数 (本地参数?实在没查到,请大家提供好的名字,谢谢~~~~)
     
      使用TTURLAction的 query 属性可以实现,也可以使用相同功能的函数 applyQuery: ,例如,我们要在一个新视图中显示一个NSArray中的所有项:



      在这个例子中,数组被直接传递给 initWithName: ,但是也需要接收器匹配query参数,此时query是数组:



      但是要注意一个问题,如果用户浏览完视图后退出了应用,当应用重新启动时,应用会加重url @"tt://restaurant/Chotchkie's",但是此时的 query 将是 nil。




















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值