2010-03-12 97 views
3

我不知道,爲什麼按鈕在工具欄設置爲隱藏和取消隱藏後消失。 我該如何解決它?當隱藏和取消隱藏工具欄時,按鈕項丟失

設置一個按鈕的代碼

-(void)viewDidAppear:(BOOL)animated { 
    //NSLog(@"viewDidAppear "); 

    [self becomeFirstResponder]; 
    //Create a button 
    UIBarButtonItem *back = [[UIBarButtonItem alloc] 
         initWithBarButtonSystemItem:UIBarButtonSystemItemRewind 
       target:self action:@selector(goback:)]; 

    UIBarButtonItem *fixspace1 = [[UIBarButtonItem alloc] 
           initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace 
           target:self action:nil]; 

    UIBarButtonItem *next = [[UIBarButtonItem alloc] 
          initWithBarButtonSystemItem:UIBarButtonSystemItemFastForward 
          target:self action:@selector(gofwd:)]; 
    UIBarButtonItem *stop = [[UIBarButtonItem alloc] 
          initWithBarButtonSystemItem:UIBarButtonSystemItemStop 
          target:self action:@selector(stopload:)]; 

    UIBarButtonItem *refresh = [[UIBarButtonItem alloc] 
          initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh 
          target:self action:@selector(refreshWeb:)]; 


    [self.navigationController.toolbar setItems:[NSArray arrayWithObjects:fixspace1, back, fixspace1, stop, fixspace1, next, fixspace1, nil] animated:YES]; 
    [self.navigationItem setRightBarButtonItem:refresh animated:YES]; 

    [self.navigationController.view addSubview:self.navigationController.toolbar]; 

    [stop release]; 
    [next release]; 
    [back release]; 
    [refresh release]; 
    [fixspace1 release]; 
} 

,並設置我的按鈕,這個方法

-(void)viewDidAppear:(BOOL)animated 

該代碼使用了隱藏工具欄

[self.navigationController setNavigationBarHidden:YES animated:YES]; 
    [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES]; 
    [self.navigationController setToolbarHidden:YES animated:YES]; 

alt text

+0

您可以發佈您的代碼,其中顯示的按鈕?這是你的viewDidAppear方法 – pheelicks 2010-03-20 11:17:26

+0

是的,我更新它 – RAGOpoR 2010-03-20 14:03:46

+0

這一行的目的是什麼: [self.navigationController.view addSubview:self.navigationController.toolbar]; 它似乎是多餘的或完全錯誤的。文檔說工具欄是「用於呈現動作表時」,我不相信你正在做。即使那樣,我也看不出爲什麼你需要將它添加到視圖中。 – Amagrammer 2010-03-20 16:47:51

回答

9

用於設置工具欄項目的documented method通過視圖控制器的toolbarItems屬性爲。該same UINavigationController Reference還列出了toolbar屬性爲只讀,並且特別警告

你不應該直接修改UIToolbar 對象。

因此,嘗試改變

[self.navigationController.toolbar setItems:[NSArray arrayWithObjects:fixspace1, back, fixspace1, stop, fixspace1, next, fixspace1, nil] animated:YES]; 

[self setToolbarItems:[NSArray arrayWithObjects:fixspace1, back, fixspace1, stop, fixspace1, next, fixspace1, nil] animated:YES]; 
+0

感謝您的建議David Gelhar – RAGOpoR 2010-03-24 04:18:22

+0

感謝大衛Gelhar它的工作,我的按鈕後隱藏起來! – RAGOpoR 2010-03-24 15:20:08

+0

偉大的答案...救了我20分鐘,我確定:) – jkp 2010-05-08 21:18:30

0

我懷疑你應該在將它們添加到工具欄後立即釋放你的工具欄按鈕。您應該將它們保存在實例變量中,並將它們釋放到您的dealloc中。

+0

這部分沒有問題。導航控制器保持對它們的引用,這就夠了。 – Amagrammer 2010-03-20 23:06:05

1

看到沒有更好的答案,我會推廣我先前的評論。嘗試取出這一行:

[self.navigationController.view addSubview:self.navigationController.toolbar]; 

我還沒有嘗試過這樣的事情,但它看起來不正確,並且非常反對iPhone SDK的哲學。如果控制器對象已經有一個指向工具欄的指針,爲什麼你需要將它添加到視圖?如果這是正確的地方,控制器對象本身就會這樣做。

+0

感謝Amagrammer,你說得對,但是當我隱藏和取消隱藏工具欄時,我的按鈕消失了,我怎樣才能稱它們回來? – RAGOpoR 2010-03-21 01:48:02

+0

請向我們展示您用於隱藏和取消隱藏的代碼。 此外,如果工具欄位於導航欄中,您可能不必同時隱藏 - 只是導航欄。 – Amagrammer 2010-03-21 13:12:21

+0

此代碼用於隱藏工具欄 [self。navigationController setNavigationBarHidden:YES animated:YES]; [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES]; [self.navigationController setToolbarHidden:YES animated:YES]; – RAGOpoR 2010-03-21 16:05:31