0

我有一個帶有4個選項卡的TabBar應用程序。所有四個標籤都有導航控制器。在設置選項卡中,我有一個包含「反饋」單元格的表格。單擊單元格時,會推送包含帶有幾個字段的反饋表單的FeedBackView控制器。這有一個類別的文本框。當文本框被觸摸時,模式視圖控制器(FeedBackModalView)會顯示一個選擇器。在FeedBackModalView控制器的viewDidLoad方法中,我輸入NSLog(@"%@", self.parentViewController).在控制檯中,它將parentViewController顯示爲TabBar控制器。這是爲什麼?它不應該顯示FeedBackView控制器作爲父視圖,因爲我在該控制器中呈現模態視圖?瞭解視圖控制器

我希望我很清楚。

+0

你希望獲得什麼對象?也許有人可以指出你訪問它的變量。 – 2011-03-09 06:20:26

+0

我想從模態視圖訪問FeedBackView控制器。它有一個方法,它將在選擇器中選擇的類別之後設置類別文本字段。在基於簡單視圖的應用程序中,我使用[self.parentViewController setCategoryText](在FeedBackController中定義了setCategoryText)。但在這一個parentViewController是一個tabBarController。 – 2011-03-09 06:24:06

回答

1

使用presentModalViewController與UITabBarController有一些問題,我相信該方法的內部行爲在最近的SDK版本中不斷變化。底線是,您應該使用根視圖控制器來模態呈現視圖控制器。如果您正在使用標籤欄界面,那麼它將成爲UITabBarController對象。

在舊版本的SDK中,當我在標籤欄控制器內的視圖控制器中呈現模態視圖時,模態視圖未全屏顯示,這不是預期或記錄的行爲。現在一個模式視圖似乎全屏出現在任何地方,如果[self presentModalViewController:animated:]方法內部檢查self並且它具有非零parentViewController屬性,我將不會感到驚訝,將消息發送給父視圖控制器(這將解釋您的觀察) 。

我的記憶很模糊,也許有人要糾正我。不過,我仍然相信這是直接理解(也可能是練習)presentModal...只適用於根視圖控制器。

+0

好的謝謝。我想知道,有沒有辦法從任何視圖獲取rootViewController? – 2011-03-09 06:31:09

+0

沒有內置的方法來獲得視圖控制器,所以你需要自己在根vc和其他視圖之間進行通信。這些視圖可能會保留在根vc的視圖中,當然,它是由根vc保留的。因此,不要通過在某些視圖對象中保留root vc來創建保留週期。您可以將根vc分配(不保留)到視圖的屬性,這基本上意味着根vc成爲視圖對象的委託。在這種情況下委託是一種很好的做法,但如果滿足您的需求,您也可以使用通知或KVO。 – MHC 2011-03-12 15:57:39