2015-06-07 58 views
2

我有一個UITableViewController,示例NewsfeedController和具有合成屬性爲set/get。UITabBarController setSelectedViewController只有視圖控制器在標籤欄控制器的視圖控制器的列表中可以選擇

NewsfeedController* vc = [[NewsfeedController alloc] init]; 
vc.tagId = 10; 
[self.tabBarController setSelectedViewController:vc]; 

它顯示錯誤:僅在標籤欄控制器的視圖控制器的列表視圖控制器可以選擇: [的UITabBarController setSelectedViewController]。

我看到UITabBarController setSelectedViewController: only a view controller in the tab bar controller's list of view controllers can be selected,它說「刪除你所傳遞的視圖控制器數組的綜合」。

你可以給完整的代碼如何實現?我需要的是,我想更改爲其他選項卡並傳遞變量,因此在NewsfeedController中可以使用這些變量。如果我使用[self.tabBarController setSelectedIndex:0]它可以更改選項卡,但是如何傳遞該變量並觸發刷新/重新啓動視圖?

如果可能的話,如果使用setSelectedViewController,它是否可以更改爲未在所有選項卡控制器項目中列出的視圖。 (例如在UITab中,選項卡是:tab1,tab2,tab3,但我想更改爲tab4)。

+0

爲什麼要重新創建任何視圖?這是一個非常明顯的跡象,表明代碼寫得不好 - 你不應該重新加載/重新加載視圖。 – luk2302

回答

3

您需要獲取已經在選項卡欄控制器中的NewsFeedController的引用,而不是創建新的實例(這是您使用所發佈的代碼所做的工作)。您從標籤欄控制器的viewControllers屬性中獲得該引用。因此,例如,如果NewsFeedController位於第二個選項卡(索引1處的那個選項卡),那麼您應該這樣做:

NewsfeedController* vc = self.tabBarController.viewControllers[1]; 
+0

但是我認爲他是故意試圖創建一個新的實例 - 無論出於何種原因... – luk2302

+0

@rdelmar 1.那麼如何將變量傳遞給現有的控制器並重新加載控制器。 2.你如何顯示那裏沒有列出的控制器?例如:該選項卡只有tab1,tab2,tab3,但是你想顯示tab4,它不包含在選項卡中。 luk2302:不是真正創建新實例,而是如何將n刷新傳遞給Controller。 Thx – Jef

+0

@Jef如果控制器不在其中一個選項卡中,則需要將其添加到viewControllers數組中,以使其成爲選項卡控制器之一(除非您不希望它在選項卡欄控制器中,在這種情況下,你以模態方式呈現它)。至於傳遞變量,一旦你有我的答案中顯示的引用,你設置了一些屬性intuit控制器。 – rdelmar

相關問題