[英]iOS UITabBarController does not AutoRotate when a new tab is selected
[英]Regarding the UITabBarController, is there a way to force a view to be fully released when a new tab is selected
我正在為iPhone創建一個標簽欄應用程序,如果選擇了新標簽頁,我希望當前處於活動狀態的所有視圖都可以完全卸載/釋放。 當任何選項卡被重新選擇時,我希望它必須重新加載所有內容。 我尋求該功能的原因是因為所有視圖都與單個數據庫交互,並且可以修改數據庫。 構建視圖時,它們是在當前數據庫的基礎上構建的,這意味着它們可以過時而無需強制重新加載視圖。
要查看我指的是在iPhone上加載“電話”應用程序的含義,您可以在鍵盤上輸入數字,然后切換選項卡,再切換回鍵盤,您輸入的數字將保留在那里。 對於Phone應用程序來說,這是一個理想的特性,但對於我正在設計的東西卻沒有那么多。
有沒有辦法做到這一點? 或者,切換選項卡時是否應該使用另一種方法來更新視圖?
我認為Neil Galiaskarov評論說您不應該考慮發布該觀點。 將您當前的重載邏輯放入-(void)viewWillAppear
想法很合理:
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppeared:animated];
// Any code you are currently triggering in your init / viewDidLoad
// to reload your database and display the result
}
每次您通過標簽欄返回時,都會觸發此操作,並且應該為您提供所要獲得的結果。 但是,根據接下來的操作,有幾點警告可能無法提供所需的功能:
viewWillAppear
和viewDidAppear
)。 如果后者是一個問題,可以通過BOOL _shouldTriggerReload;
處理它的一種方法BOOL _shouldTriggerReload;
:
將viewWillAppear
邏輯包裝在if中:
if (_shouldTriggerReload){
_shouldTriggerReload = NO; // Preparing for the next round
// Any code you are currently triggering in your init / viewDidLoad
// to reload your database and display the result
}
然后在您的viewDidDisappear
:
- (void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
_shouldTriggerReload = YES;
}
而且還必須在viewDidLoad中為該第一個條目設置它:
- (void)viewDidLoad{
_shouldTriggerReload = YES;
}
viewControllers
具有viewControllers
屬性。 您可以修改viewControllers屬性來實現這種效果。
我會做的是
對於要重新加載其視圖的view controller(say VC)
,當用戶選擇該選項卡時。 將UITabBarControllerDelegate
委托添加到VC。 並實現以下方法。
– tabBarController:shouldSelectViewController:
當用戶在底部標簽欄選擇這個, tabBarController
調用此方法是否應該它顯示此的viewController與否。 在這里, change the tabBarController.viewControllers
屬性並返回YES。
假設您的標簽欄僅附加了兩個viewControllers,用戶現在選擇標簽2,您必須創建新的viewController並顯示它。 所以,
UITabBarController *tabBarController;
NSMutableArray *array=[NSMutableArray arrayWithArray:tabBarController.viewControllers];
UIViewController *viewController2; //init your viewController type 2
[array replaceObjectAtIndex:1 withObject:viewController2];
tabBarController.viewControllers =[NSArray arrayWithArray:array];
使用委托方法
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
添加您每次選擇tabBarItem時都可以觸發的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.