簡體   English   中英

ios將數據從TabbarController傳遞到Storyboard中的ViewController

[英]ios Pass data from TabbarController to ViewController in Storyboard

我在storboard編輯器中有一個帶有4個選項卡設置的TabBarController。 當我選擇第四個選項卡時,我想向其視圖控制器發送一個字符串。 在我的TabbarController類(名為TabBarVC)中,實現了以下方法:

- (void)tabBarController:(UITabBarController *)theTabBarController didSelectViewController:(UIViewController *)viewController {
    NSUInteger indexOfTab = [theTabBarController.viewControllers indexOfObject:viewController];
    if(indexOfTab == 3) {
        SupplierListVC *slvc = (SupplierListVC *) viewController;
        slvc.locationType = @"favorite";
        self.tabBarController.selectedViewController = slvc;
    }
}

可以很好地調用此方法,但是不會傳遞字符串。 調試時,我注意到上面的代碼是在SupplierListVC的viewDidLoad之后調用的。 我在這里做錯了什么? 選擇選項卡時如何傳遞字符串?

如您所說,此方法在viewDidLoad之后調用。 方法名稱本身應該告訴您: **DID**SelectViewController

過去式。 英語可能不是您的第一語言,但是在使用Apple的方法名稱時,對英語動詞時態的很好理解確實走了很長一段路。 他們沒有誤導。 他們僅在方法名稱中告訴您該方法的使用時間/目的/原因。

現在,應該將字符串適當地傳遞給視圖控制器-您可能只是在錯誤的時間檢查了它。

但是使用標簽欄時,每次切換到該標簽時,都不會加載其中包含的視圖控制器。 這些選項卡僅預加載一次,並且只有在關閉選項卡欄控制器本身(或者可能從選項卡欄控制器的視圖控制器數組中刪除視圖控制器)時才將其卸載。

您可以使用tabBarController:shouldSelectViewController:

與您所使用的方法一樣,該方法為您提供了對標簽欄控制器和它也試圖切換的視圖控制器的引用。 但是,它將返回BOOL值。 如果返回NO ,則不會發生切換。 您可以根據需要隨時簡單地返回YES ,盡管這里的要點是,此方法在開關啟動之前被調用,因此肯定在調用viewWillAppearviewDidAppear之前被調用。

將數據從標簽欄控制器傳遞到ViewController時,我遇到了同樣的問題。

NumberpadViewController *numpad= [[self viewControllers] objectAtIndex:1];
numpad.number=@"12345";

我在viewdidload方法中得到的數字為nil。

- (void)viewDidLoad {
 NSLog(@"number@",number);//nil value
    }

因此,我曾使用viewdidappear方法對數字數據進行處理。

-(void)viewDidAppear:(BOOL)animated{
   NSLog(@"number@",number);//12345
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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