以下情况:
在TTTableViewController中,我添加了一些带URL的单元格。
例如,他们正以@"tt://photos"
开设课程。这很好用。
首先,我在TT示例中看到了一些网址,例如@“tt / photos / 1”。是否有可能在我的照片类中获取此“1”并说,例如,好的,请打开图片1,ore是这个在TTNavigatior中宣布打开特定类的另一个URL吗?
另一件事是:是否可以将对象转发到链接类? 单击一个单元格打开@“tt:// photos”(我的TTNavigator中的链接类)
使用普通的tableviews我可以覆盖我的init方法并使用我的initialize方法发送一个对象,这也可以通过单击我的TTItems来实现吗?
谢谢!
答案 0 :(得分:21)
自己想出来,对于那些需要它的人:
首先(在导航地图中传递“subURLs”)
可以使用@“tt:// photos / firstphoto”导航到网址,您可以像这样获取“firstphoto”:
//Prepare your Navigator Map like this
[map from:@"tt://photos/(initWithNumber:)" toViewController:[PhotoVC class]];
在您的PhotoVC中,您可以访问此号码:
-(void) initWithNumber: (NSString*)number {
NSLog(@"%@",number);
}
使用此网址调用您的View Controller会显示:
PhotoVC* controller = [[PhotoVC alloc] initWithNumber:@"1"];
[navigationController pushViewController:controller animated:YES];
[controller release];
第二个(在TTTableViewController中传递对象)
它有点棘手,但你没有Subclass任何东西。
首先,没有TableItem中的URL
[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;
}
你完成了;)
答案 1 :(得分:3)
我试图实现choise的答案,学到了很多东西,最终不得不让标注显示出来,并且让许多网址的实现保持简单,所以这就是我所做的。
将URL保留在TableItem中,
在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;
}
通过TTTableViewController发现了“shouldOpenURL:”,我试了一下,然后就可以了。现在表视图没有打开重复的视图,并且有标注!
谢谢你选择!
答案 2 :(得分:0)
虽然当你在代码中创建TTURLAction时,选择的答案适用于多个参数,但当你想在TTStyledLabel.One解决方案中嵌入链接到视图控制器时,它是非常有用的,即在单个字符串中使用多个参数。
<a href='app://view2/param1=value1¶m2=value2&...'>LabelName</a>
如果您希望代码解析此类网址并获取参数,请随时向我发送消息,我将向您发送我的解析器类。 (或者您可以使用NSScanner构建自己的!)
也不要忘记逃避&amp; s,否则TTStyledLabel会不喜欢它!
答案 3 :(得分:0)
您不需要在TTTableViewController的当前版本1.0.6.2上运行它。 “URL”选项按预期工作。如果它不适合您,那么您的 URL 会被破坏,或者您在ViewController上调用了错误的函数。您必须通过 URL 调用的函数必须返回ViewController的id(是ViewController的构造函数)。然后它会按预期工作。
我会将示例表单 choise 改为像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 / p>