2013-08-21 26 views
0

我介紹模態視圖控制器,打包在UINavigationController中。模態視圖控制器 - UIBarButtonItems不會持續

當它們第一次出現時,酒吧按鈕項目是正常的。

但是,如果我點擊一個按鈕,一個新的視圖控制器推到UINavigationController的,然後我用視圖控制器的後退按鈕,它被趕回來的原模態視圖控制器的按鈕不顯示,(但他們工作時,我點擊它們 - >只是看不到他們)

我似乎無法弄清楚爲什麼會發生這種情況。

這是一些代碼。

哦,順便說一句,我定製了導航控制器的導航欄的背景。我有一種感覺,這可能會導致這種視覺干擾,但我不知道如何改變才能正確使用。

在GGMainViewController:

GGSelectTeamsViewController *chooseTeam = [[GIFSelectTeamsViewController alloc] init]; 
UINavigationController* navigationController = [[UINavigationController alloc] initWithRootViewController:chooseTeam]; 
[self setupModalNavigationBar:navigationController]; 
[self presentViewController:navigationController animated:YES completion:nil]; 

- (void)setupModalNavigationBar:(UINavigationController *)nav { 
    // unnecessary code removed for a quicker read 
    // basically navigation bar has a background gradient as well as a bottom border 
    [nav.navigationBar.layer addSublayer:bottomBorder]; 
    [nav.navigationBar.layer addSublayer:gradient]; 

} 

在GGSelectTeamsViewController

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    title = [[UILabel alloc] init]; 
    title.text = someText; 
    title.backgroundColor = [UIColor clearColor]; 
    title.textColor = [UIColor whiteColor]; 
    self.navigationItem.titleView = title; 
    [title sizeToFit]; 

    UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [backButton setTitle:@"Back" forState:UIControlStateNormal]; 
    [backButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 
    backButton.frame = someFrame; 
    [backButton addTarget:self action:@selector(goBack) forControlEvents:UIControlEventTouchUpInside]; 
    [self.navigationItem setLeftBarButtonItem:[[UIBarButtonItem alloc] initWithCustomView:backButton] animated:NO]; 


    UIButton *selectButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [selectButton setTitle:@"Select" forState:UIControlStateNormal]; 
    [selectButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 
    selectButton.frame = someFrame; 
    [selectButton addTarget:self action:@selector(sendContent) forControlEvents:UIControlEventTouchUpInside]; 
    [self.navigationItem setRightBarButtonItem:[[UIBarButtonItem alloc] initWithCustomView:selectButton] animated:NO]; 
} 

由於導航項目在viewDidLoad方法設置,爲什麼我不能看到他們(但他們仍然功能)時,我從另一個視圖控制器返回它?

+0

如果您註釋掉,你叫setupModalNavigationBar行,它正常工作? – rdelmar

+0

是的,我試過了,它在setupModalNavigationBar方法中沒有導航欄自定義的情況下運行良好,有沒有用代碼自定義它,沒有這些錯誤?我正在考慮使用背景圖片,以查看問題是否仍然存在@rdelmar – GangstaGraham

回答

0

的問題是:

  • 導航欄(由代碼完成)

將溶液梯度:

  • 使用草圖來創建的圖像漸變並使用外觀代理將圖像設置爲背景圖像

    [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"NavigationBarBackground"] forBarMetrics:UIBarMetricsDefault];

0

這似乎是一個過度複雜的做法。

爲什麼不創建自己的按鈕,然後使用UINavigationBar中的setRightBarButtonItems:items:方法設置所需的按鈕?

我猜他們消失,因爲你將它們添加到UINavigationBar的圖層。如果你想保留這個方法的圖層,你可能想要在viewWillAppear方法中添加它們,但是你可能需要調用removeFromSuperlayer來確保你不會多次添加東西。

希望這會有所幫助。

+0

我將按鈕添加到self.navigationItem,而不是圖層,如上面的代碼所示。嗯.. viewDidAppear使酒吧按鈕的項目顯得有點晚了。 – GangstaGraham

+0

對不起,沒有正確閱讀。你試過 [self.navigationController.navigationItem setRightBarButtonItem:[[UIBarButtonItem alloc] initWithCustomView:selectButton] animated:NO]; 此外,如果這不起作用,請嘗試在viewWillAppear中,而不是viewDidAppear。 –

+0

好吧,對不起,我想我讀錯了,我的壞,會檢查出來。謝謝您的幫助! – GangstaGraham