2009-08-30 29 views
14

私は、DetailsViewControllerをプッシュするUINavigationControllerを持っています。このDetailsViewControllerでは、すべてのUINavigationController(少なくともiPhone OS3.0以降)に付属するツールバーを使用したいと思います。UIToolbarのアイテムが表示されない

だから、のviewDidLoadで私DetailsViewControllerに私はUIBarButtonItemを作成し、私は配列に追加し、ナビゲーションコントローラにそれを引き渡す:

- (void) viewDidLoad { 
    UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(selectTemplate)]; 
    NSArray *items = [NSArray arrayWithObject: item]; 

    TestUIAppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 
    UINavigationController *navController = delegate.navigationController; 

    [navController setToolbarItems: items animated:NO];  
    [navController setToolbarHidden: NO animated: YES]; 
} 

しかし、何らかの理由で、UIToolbarが上のアニメーション化されながら、画面には、アイテムはツールバーに追加されません。

これが機能するには、UIToolbarで行う必要のある特定の順序がありますか?

P .:アプリケーションが(強制)ランドスケープモードにあり、navigationController.viewに回転変換があります。それはそれと関係がありますか?

答えて

37

さらに掘り下げとデバッグを行いましたが、navigationControllerを修正しようとした私のアプローチが間違っていたという結論に達しました。代わりに、単にDetailsViewControllerのtoolbarItemsプロパティを設定しておく必要があります。

はその後、私のコードはうまく働いた:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { 
     UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemBookmarks target:self action:@selector(selectTemplate)]; 

     NSArray *myToolbarItems = [[NSArray alloc] initWithObjects: item, nil];   
     [self setToolbarItems: myToolbarItems]; 
     [myToolbarItems release]; 

    } 
    return self; 
} 
+1

ショートコメント - それはリークされますようにUIBarButtonItem割り当てが見えること。おそらくそれをautoreleaseに設定するべきです。 –

+1

ああ、そうです。しかし、NSArrayはそれを保持しているので、代わりに配列に追加した後に_item_をリリースすることができます。 – NSSec

+0

私は、あなたがその1つのviewcontrollerのためにそれを表示することを許可したものを-1にしました。それはナビゲーションの寿命を通じて、後続のすべてのView Controllerに従わない...ほとんどのツールバーはやらないでしょう。 – Jann

関連する問題