2011-04-20 74 views
1

我最近開始爲iPhone開發,到目前爲止我的表現相當不錯,但是我看起來並沒有這樣的基本模式。如何將委託設置爲另一個ViewController?

說,我有兩個視圖和自定義委託協議的TabBar,因而我的結構如下:

  • AppDelegate.h/.M
  • myDelegateProtocol.h
  • FirstViewController.h /.m
  • SecondViewController.h/.M
  • MainView.xib
  • FirstView.xib
  • SecondView.xib

現在我要實現以下目標:我把一個按鈕,在FirstView.xib,我想它調用IBAction爲將消息發送到(FirstViewController OFC內。) SecondViewController([self.delegate tellSecondViewContrToSayHi])並調用另一種方法,它只是在控制檯上打印一條日誌,說「嗨,我在這裏」。

到目前爲止,我知道我需要在理論上做:

  1. 指定協議。
  2. 在SecondViewController中實現協議。
  3. 我FirstViewController內創建ID < myDelegateProtocol>委託 ...最後但並非最不重要的:
  4. 設置self.delegate = secondViewControllerObject。

現在,nr.4是問題所在。我如何將代理鏈接到其他viewController?我的意思是我不是那個實例化視圖的人,因爲tabBar有點爲我做,...任何建議?還是我太累了,不能注意到我在某個地方做了一件非常愚蠢的事情?

理論上同樣的問題也適用於目標:action:thing,...我的意思是,如何定義目標?

非常感謝, 芥末

+0

我很好奇,如果你的設計是健全的。看起來好像你可能試圖以有趣的方式使用委託。 – 2011-04-20 21:05:21

+0

你是對的!這實際上在我的任何應用程序中都沒有真正的應用程序,我只是很好奇並且四處遊蕩以便......好了解了一些事情並理解機制:) – pkluz 2011-04-20 21:20:56

+2

檢查了一下,它有相當不錯的信息:http ://stackoverflow.com/questions/626898/how-do-i-create-delegates-in-objective-c – 2011-04-20 21:32:53

回答

2

你有正確的想法,假設你想通過該委託協議,這些控制器之間相對緊密耦合。

既然控制器不知道另一個,直到該委託屬性設置,你需要有一個對象,它有一個引用它們兩個連接的關係。在你的情況下,這可能是可以創建兩個控制器的應用程序委託,將其中一個設置爲另一個的委託,並將它們傳遞給標籤欄控制器。

你可能真正想要的是讓應用程序委託給兩個控制器引用一些共享模型對象。您的FirstViewController可以在點擊按鈕時更新該模型,並且您的SecondViewController可以觀察對模型的更改以更新其顯示(或僅在基於當前模型狀態出現時更新其視圖)。這樣你的控制器就不需要知道任何關於對方的事情。

相關問題