2009-08-30 64 views
14

我有一個UINavigationController獲取推送DetailsViewController。在這個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.S .:應用程序處於(強制)橫向模式,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。 – 2009-08-31 00:56:14

+1

哦,對。但NSArray保留它,所以我可以在將它添加到數組後將_item_發佈出來,對吧? – NSSec 2009-08-31 05:21:08

+0

我在這個cos上做了一個-1,你允許你爲那個viewcontroller顯示它,它不會遵循所有隨後的視圖控制器,通過導航的生命......這是大多數工具欄不會去做的。 – Jann 2010-05-10 21:38:35