2012-12-21 159 views
0

我意識到這個問題已被要求去世,最近幾年至少每月一次在stackoverflow上,但我仍然找不到解決方案。從另一個ViewController調用一個ViewController的實例方法

我有兩個ViewController來源於UITabBarController。兩者都通過故事板初始化。我試圖從另一個VC調用一個VC的方法。實例方法,當然。

enter image description here

我聽到的以下可能性:

1: NSNotifications

2:定義協議和聲明一個VC作爲另一個委託。

3:實際上通過RootViewController以某種方式調用該方法。

我有代碼工作通過NSNotifications,但我不喜歡這個概念,我想了解正確的方法來做到這一點。我對可能性(3)最感興趣,然後(2)作爲最後的手段。

我試圖讓(2)工作幾個小時,但沒有初始化委託VC從其他VC,我很難過。 (由於故事板而不是選項)。

是(2)或(3)可能嗎?怎麼會這樣?

如果兩者都不可能,我對首選iOS架構有什麼誤解?

回答

1

是的,3是可能的。假設您有兩個UIViewController類,FooViewController(標籤索引0)和BarViewController(標籤索引1)。假設您想從BarViewController調用FooViewController-(void)doFoo方法。

BarViewController,做[(FooViewController *)[self.tabBarController.viewControllers objectAtIndex:0] doFoo]

+0

好的,幾乎可以工作。萬分感謝!我忘了提到FooViewController隱藏在UINavigationController後面。對不起,我忘了把它放到我原來的帖子中。你能否按照這種情況編輯代碼? http://image.bayimg.com/4877ae4d46dbdae21701f4648b51fcbe08e14c76.jpg(故事板屏幕快照) – stackOverFlew

+1

我將其作爲練習留給閱讀者=)提示:'[self.tabBarController.viewControllers objectAtIndex:0] .viewControllers' will give你在'UINavigationController'中的VC數組。 – tom

+0

hm ...它的抱怨:當我嘗試NSLog數組時,沒有在'id'對象上找到屬性'viewControllers'... – stackOverFlew

0

我想用NSNOtification並不總是做類似事情的錯誤方式。我也爲這個概念而努力。

此塞納里奧,我想通知是好的:

  1. 你有一個包含控制器A和B
  2. 控制器A是一些物體,比如,書籍的列表一個tabbarcontroller。
  3. 控制器B是控制器,您可以通過填寫表單創建一本書並單擊提交
  4. 控制器A然後更新其列表。

原因是,控制器A的更新不是由於「點擊提交」。它會刷新,因爲書已創建。這是關於數據的東西。不知怎的,「一本書被創建」是一個應用程序中的關鍵事件。

另一個塞納里奧,這是不行的

  1. 你有一個包含控制器A和B的一個tabbarcontroller
  2. 控制器A具有ViewC在中心
  3. 控制器B有一個按鈕,用戶點擊該廣告時,它,ViewC向上移動

這只是我自己的意見。

相關問題