2010-02-23 48 views
9

以下情况:了解TTNavigator

在TTTableViewController中,我添加了一些带有网址的单元格。 例如,他们正在开设一个类别为@"tt://photos"的课程。这工作得很好。

第一件事是,我看到TT中的一些网址例如@“tt/photos/1”。是否有可能在我的照片类中获取这个“1”,并说,例如,好的,请打开图片一,这是唯一的另一个URL在TTNavigatior中声明打开一个特定的类?

另一件事是:是否有可能将对象转发给链接的类? 点击一个单元打开@“tt:// photos”(我的TTNavigator中的链接类)

使用正常的tableviews我可以覆盖我的init方法并发送一个对象与我的初始化方法,这也可以通过点击我的TTItems?

谢谢!

回答

21

想通了我自己,对于那些谁需要它:

第一(通过在导航地图 “subURLs”)

导航到一个URL与@“TT://照片/ firstphoto像这样的“是可能的,你可以得到一个 ”firstphoto“:

//Prepare your Navigator Map like this 
[map from:@"tt://photos/(initWithNumber:)" toViewController:[PhotoVC class]]; 

在你PhotoVC你可以访问此号码:

-(void) initWithNumber: (NSString*)number { 
    NSLog(@"%@",number); 
} 

调用这个网址您的视图控制器看起来:

PhotoVC* controller = [[PhotoVC alloc] initWithNumber:@"1"]; 
[navigationController pushViewController:controller animated:YES]; 
[controller release]; 

二(传递一个TTTableViewController对象)

它有点棘手,但你不要有任何类继承。

第一,零在你TTTableViewController的表项

[TTTableLink itemWithText:@"TTTableLink" URL:nil] 

的URL写下这个方法

- (void)didSelectObject:(id)object atIndexPath:(NSIndexPath*)indexPath { 
    TTURLAction *urlAction = [[[TTURLAction alloc] initWithURLPath:@"tt://photos"] autorelease]; 
    urlAction.query = [NSDictionary dictionaryWithObject:@"firstphoto" forKey:@"photo"]; 
    urlAction.animated = YES; 
    [[TTNavigator navigator] openURLAction:urlAction]; 
} 

现在在你的PhotoVC你需要像这样

- (id)initWithNavigatorURL:(NSURL*)URL query:(NSDictionary*)query { 
    if (self = [super init]) { 
       NSLog(@"%@",query); 
} 

    return self; 
} 

你完成了;)

+0

感谢这个! – 2010-12-31 08:36:41

+0

太棒了!我没有在'[TTTableLink itemWithText:@“TTTableLink”URL:nil''中传递nil''。这很愚蠢,你必须这样做,因为现在我必须手动告诉单元显示正确的箭头。 – 2011-05-17 19:03:52

+0

Choise,你可以按照预期使用URL。看到我对你问题的回答。我已将您的代码更改为符合TTNavigator。 – Fa11enAngel 2012-08-16 19:13:37

3

我试图实现choise的答案,学到了很多东西,最终不得不让出现的标注出来,并保持许多简单的实现,所以这就是我所做的。

  1. 保持URL的表项,

  2. 使用此代码在TTTableViewController子类。

    - (void)didSelectObject:(id)object atIndexPath:(NSIndexPath*)indexPath { 
    
         NSLog(@"Its url is %@", [object URL]); 
    
         TTURLAction *urlAction = [[[TTURLAction alloc] initWithURLPath:(NSString *)[object URL]] autorelease]; 
    
         urlAction.query = [NSDictionary dictionaryWithObject:self.user forKey:@"user"]; 
    
         urlAction.animated = YES; 
    
         [[TTNavigator navigator] openURLAction:urlAction]; 
    
    } 
    
    - (BOOL)shouldOpenURL:(NSString*)URL { 
    
        return NO; 
    
    } 
    
  3. 那 “shouldOpenURL:” 被发现翻翻TTTableViewController,我尝试过了,和它的工作。现在表格视图不打开重复的视图,并且有标注!

谢谢选择!

+1

是的,我也刚刚发现了这个难题。重写'shouldOpenURL:'返回NO是一个更好的解决方案,它比将“TTLinkedItem”的URL参数传递给nil更好。这样你就可以在表格视图单元格中保留右箭头。 – 2011-05-17 19:12:15

0

尽管当你在代码中创建TTURLAction时,选择的答案适用于多个参数,但是当你想在你的TTStyledLabel.One解决方案中嵌入到视图控制器的链接时,它并不是非常有用,那就是在单个字符串中使用多个参数。

<a href='app://view2/param1=value1&param2=value2&...'>LabelName</a>

,如果你想要的代码解析此类URL,并获得PARAMS请随时给我一个信息,我会送你我的分析器类。 (或者你可以用NSScanner建立你自己的!)

另外不要忘了逃避&否则TTStyledLabel不会喜欢它!

+0

是的,你也可以使用“get-like”params'app:// myviewcontroller?foo = bar&lorem = ipsum' – choise 2011-05-17 21:29:13

+0

你是对的...我刚发现那个app:// view2/-param1-param2-param3 - does not really work ... TTNavigator将它转换为'http:// app:// view2/-param1-param2-param3-',因为它看起来不像一个URL。我现在将编辑它。 – samyzee 2011-05-17 22:28:21

0

您无需在当前版本1.0.6.2上为TTTableViewController运行此操作。 “URL”选项按预期工作。如果它不适合你,那么你的网址已损坏,或者你的ViewController调用了错误的功能。您必须通过URL调用的函数必须返回ViewController的id(是ViewController的构造函数)。然后它会按预期工作。

我会更改示例表格选择就像TTNavigator期望的那样。

添加一个映射,它TTNavigator将使用导航:

//Prepare your Navigator Map like this 
[map from:@"tt://photos/(initWithNumber:)" toViewController:[PhotoVC class]]; 

与URL集创建TTTableLink(或TTStyledText,或其他),这应该马赫地图:

[TTTableLink itemWithText:@"TTTableLink" URL:@"tt://photos/1"] 

将此添加到您的PhotoVC中,由给定的URL上的TTNavigator调用

-(id) initWithNumber: (NSString*)number { 
    if (self = [super init]) { 
     self.title = @"Some Title"; 

     NSLog(@"%@",number); 
    } 

    return self;  
} 

您不需要覆盖功能didSelectObject,作为TTNavigator会打电话给你的ViewController通过定义构造函数TT://照片/(initWithNumber :)