2011-02-24 68 views
2

我开始与Three20库工作,创建使用下面的代码UIButtonThree20简单的导航

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

除非有神奇的东西我还没有发现,我认为你没有正确地连接你的按钮代表团。看起来你已经告诉按钮字符串@“tt:// samples/new”是接收按下事件的对象,并且你希望它不发送消息(不调用方法/无)。

创建与按钮视图控制器,像这样的方法:

- (void)addButtonPressed:(id)sender{ 
    TTURLAction *urlAction = [TTURLAction actionWithURLPath:@"tt://samples/new"]; 
    [[TTNavigator navigator] openURLAction:urlAction]; 
} 

然后用此取代你的按钮初始化:

self.navigationItem.rightBarButtonItem = 
      [[[UIBarButtonItem alloc] initWithTitle:@"Add New" 
              style:UIBarButtonItemStyleBordered 
              target:self 
              action:@selector(addButtonPressed:)] 
      autorelease]; 

这将调用TTNavigator单个实例打开使用所提供的字符串路径创建的操作。该按钮需要由按钮代理和自己处理,您的视图控制器完全适用于此。处理程序方法然后导致使用路径的three2导航。如果你的appDelegate中有正确的接线,three20将创建并推送你映射的视图控制器。 希望有所帮助。

0

这可能会起作用,我用它将视图推到导航控制器上。给了一个动作的导航栏按钮,那么下面的动作:

-(IBAction)navigationRightBarButton:(id)sender{ 

    [[TTNavigator navigator] openURLAction: 
    [TTURLAction actionWithURLPath:@"tt://samples/new"]]; // goes tot he ttLauncher class 
} 

那么这将推动以正确的URL路径希望这有助于。

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。

注意: 此解决方案将无法正常工作,因为发件人必须是UIBiew类型,而UIBarButton不是。它在v1.02之前工作。现在您需要使用OpenURL自己实现选择器。杰夫(Three20大老板)在拉请求中对此发表了评论463:https://github.com/facebook/three20/pull/463