2011-06-30 77 views
0

所以我在一個視圖中有兩個搜索欄,幾個按鈕和一個tableView下面的(是的,所有這些)。而且我還在上面有一個導航欄,並帶有後退按鈕。爲什麼我的視圖沒有重新加載?

對於一個特定的操作,我刪除所有的搜索欄,按鈕,我只在我的視圖中顯示一個uitableviewcell。

如果我按編輯,我希望重新加載整個視圖,而不僅僅是tableView,但我希望視圖具有搜索欄和按鈕以及導航屏幕。

我在edit按鈕的IBAction中做了[self.view reloadInputViews]。控制到這裏,但視圖只是沒有重新加載。爲什麼?

回答

-1

我不知道我是如何在StackOverflow上發佈它之後自己得到答案的。對不起,麻煩的傢伙(嘆息!)

我做[self viewDidLoad];

+0

這是一個非常古老的問題,但稱'[self viewDidLoad]'不是很好的做法。它可能適用於你提到的情況,但我提供了一個額外的答案。 – Jessedc

0

reloadInputViews專門用於firstResponders視圖。可能self.view並不是當時的第一響應者。但是,爲什麼你想使用「reloadInputViews」來做所有這些,使用起來並不容易:[self.view setNeedsLayout]?

+0

那是什麼:O? – Legolas

+0

[self.view setNeedsLayout]強制調用「layoutSubviews」方法;在這種方法中,根據「編輯」按鈕狀態(選中/未選中),您將通過顯示/隱藏子視圖並更改表視圖框架來重新展示視圖;如果你還需要更改表視圖的內容,那麼調用[tableView reloadData] – viggio24

+0

不要花心。無論如何感謝 – Legolas

0

一個更好的方式來處理刷新視圖的狀態是你的UIViewController的視圖的子視圖的抽象配置成,您可以先調用自定義的方法從viewDidLoad,再次作爲您的UIbarButtonItem的行動。

- (void)viewDidLoad { 
    //Specific, non repeated view setup 
    [self resetViewState]; 
} 

- (void)resetViewState { 
    //Repeatable view setup 
} 

這是值得做的區別的原因是因爲viewDidLoad是由系統自動後認爲是延遲加載調用。按照設計,它不是應該每個視圖多次調用的方法。如果視圖被丟棄並重新創建,它將被再次調用。

如果您需要執行佈局工作,您也可以將UIViewController子視圖的佈局移動到viewWillLayoutSubviews,系統會在不同時間再次調用它。

相關問題