Three20简单导航

时间:2011-02-24 15:15:41

标签: iphone three20

我开始使用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]];

就目前而言,当触摸按钮时,根本不会发生任何事情。设备上没有任何操作,我在控制台中看不到任何记录。

我做错了什么或错过了什么?

谢谢!

3 个答案:

答案 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路径,希望这会有所帮助。