簡體   English   中英

關於UITabBarController,是否有一種方法可以在選擇新選項卡時強制將視圖完全釋放

[英]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
}

每次您通過標簽欄返回時,都會觸發此操作,並且應該為您提供所要獲得的結果。 但是,根據接下來的操作,有幾點警告可能無法提供所需的功能:

  • 通過彈出堆棧到達屏幕時,屏幕將進行更新(從您所描述的內容可能是確定的)。
  • 如果您開始使用滑動手勢在堆棧中向后導航,但中止導航,則屏幕也會更新。 (因為這會觸發viewWillAppearviewDidAppear )。

如果后者是一個問題,可以通過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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM