我开始使用Three20库并使用以下代码创建UIButton
:
self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Add New"
style:UIBarButtonItemStyleBordered
target:@"tt://samples/new"
action:nil] autorelease];
当用户触摸按钮时,我想将NewSampleViewController
的实例推送到导航栏。我在我的应用代理的-didFinishLaunchingWithOptions
方法中添加了以下内容:
[map from:@"tt://samples/new" toViewController:[NewSampleViewController class]];
就目前而言,当触摸按钮时,根本不会发生任何事情。设备上没有任何操作,我在控制台中看不到任何记录。
我做错了什么或错过了什么?
谢谢!
答案 0 :(得分:3)
除非我还没有发现一些神奇的东西,否则我认为你没有正确连接你的按钮委托。看起来你已告诉按钮字符串@“tt:// samples / new”是接收按下事件的对象,你希望它不发送任何消息(调用no method / nil)。
使用按钮在视图控制器中创建一个方法,例如:
- (void)addButtonPressed:(id)sender{
TTURLAction *urlAction = [TTURLAction actionWithURLPath:@"tt://samples/new"];
[[TTNavigator navigator] openURLAction:urlAction];
}
然后将您的按钮init替换为:
self.navigationItem.rightBarButtonItem =
[[[UIBarButtonItem alloc] initWithTitle:@"Add New"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(addButtonPressed:)]
autorelease];
这将调用TTNavigator单例实例来打开使用提供的字符串路径创建的操作。按钮需要由按钮委托处理,而自己的视图控制器则非常适合。然后处理程序方法使用路径导致三次导航。如果您在appDelegate中正确连接了东西,则three20将创建并推送您映射的视图控制器。 希望有所帮助。
答案 1 :(得分:2)
Levous的解决方案可行,但您可以使用神奇的Three20 openURLFromButton:选择器进行简化,而不是实现自己的选择。试试这个:
self.navigationItem.rightBarButtonItem =
[[[UIBarButtonItem alloc] initWithTitle:@"Add New"
style:UIBarButtonItemStyleBordered
target:@"tt://samples/new"
action:@selector(openURLFromButton:)] autorelease];
如果您想了解结果的原因:
Three20 / SRC / Three20UI /源极/ UINSStringAdditions.m。
简而言之,Three20在NSString上添加了openUrlFromButton方法,该方法调用TTNavigator openURLAction。
注意: 此解决方案将无法工作,因为发件人必须是UIView类型UIV的,而UIBarButton则不是。它虽然在v1.02之前工作。现在你需要自己使用OpenURL实现选择器。杰夫(Three20大老板)在拉动请求463中对此发表了评论:https://github.com/facebook/three20/pull/463
答案 2 :(得分:0)
这可能有用,我用它将视图推到导航控制器上。给导航栏按钮,然后执行以下操作:
-(IBAction)navigationRightBarButton:(id)sender{
[[TTNavigator navigator] openURLAction:
[TTURLAction actionWithURLPath:@"tt://samples/new"]]; // goes tot he ttLauncher class
}
然后将视图推送到正确的url路径,希望这会有所帮助。