9

以下情况:

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

第一件事是,我在 TT 示例中看到了一些网址,例如 @"tt/photos/1"。是否可以在我的照片类中获取这个“1”并说,例如,好吧,请打开第一张图片,或者这只是在 TTNavigatior 中声明的另一个 URL 以打开特定类吗?

另一件事是:是否可以将对象转发给链接类?单击一个单元格会打开 @"tt://photos"(我的 TTNavigator 中的链接类)

使用普通的 tableviews 我可以覆盖我的 init 方法并使用我的 initialize 方法发送一个对象,这也可以通过单击我的 TTItems 来实现吗?

谢谢!

4

4 回答 4

21

我自己想出来的,对于那些需要它的人:

首先(在导航器地图中传递“subURLs”)

可以使用@“tt://photos/firstphoto”导航到 URL,您可以像这样获取“firstphoto”:

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

在您的 PhotoVC 中,您可以访问此号码:

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

用这个 url 调用你的 View Controller 看起来像:

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

第二(在 TTTableViewController 中传递对象)

它有点棘手,但你不必对任何东西进行子类化。

首先,将 TableItem 中的 URL 设为 nil

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

在你的 TTTableViewController 中写下这个方法

- (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;
}

你就完成了;)

于 2010-02-23T18:46:05.423 回答
3

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

  1. 将 URL 保留在 TableItem 中,

  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 发现的,我试了一下,它奏效了。现在表格视图没有打开重复视图,并且有标注!

谢谢选择!

于 2010-12-31T09:25:55.200 回答
0

虽然当您在代码中创建 TTURLAction 时,选择的答案适用于多个参数,但当您想在 TTStyledLabel 中嵌入指向视图控制器的链接时,它并不是很有用。一个解决方案是在单个字符串中使用多个参数。

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

如果您希望代码解析此类 url 并获取参数,请随时给我发送消息,我将向您发送我的解析器类。(或者您可以使用 NSScanner 构建自己的!)

也不要忘记转义 &s 否则 TTStyledLabel 不会喜欢它!

于 2011-05-17T21:08:56.290 回答
0

对于 TTTableViewController,您不需要在当前版本 1.0.6.2 上运行它。“URL”选项按预期工作。如果它不适合您,那么您的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 以由 TTNavigator 在给定的 URL 上调用

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

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

    return self;       
}

您不需要覆盖函数didSelectObject,因为 TTNavigator 将通过定义的构造函数tt://photos/(initWithNumber:)调用您的 ViewController

于 2012-08-16T19:10:58.260 回答