我有一個具有根視圖控制器,主視圖控制器和輔助視圖控制器的應用程序。我希望能夠從輔助視圖控制器發送消息到主視圖控制器。我如何獲得對主要的參考,以便我可以發送消息給它?有沒有更好的方法來設計這個?在iPhone上構建多視圖應用程序
回答
如果控制器是從NIB加載的,則可以在輔助控制器上定義一個插座並將其連接到接口構建器中的主控制器。
答案很簡單:你可以回到你的應用程序委託是這樣的:
YourAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
你可能已經有了一個指向你的根視圖控制器在您的應用程序委託類。而且你可能有指向根控制器對象中主要和次要視圖控制器的指針。所以,你可以這樣寫代碼:
SecondaryViewController *primary = delegate.rootController.primaryController;
然後,你可以發送消息到你的心臟的內容。沒有需要的網點;只是屬性到每個視圖控制器。
有很多更長的答案,並且還討論了爲什麼這種做法可能有問題,因爲它引入了對象之間可能不想要的聯繫。在一個「純粹的」面向對象的設計中,你將遵循一個乾淨的設計模式,在不同方向的對象之間有明確的聯繫,這樣可以更好地重用代碼。
另一種選擇是將指針傳遞給類將在初始化時需要的對象。爲視圖控制器類實現一個新的initWithSomethingOrOther,並以參數形式傳遞對象。緩存你需要的這些指針(不要忘記保留它們)以備後用。
的清潔方式做到這一點是定義一個協議,用於輔助控制器委託其中列出它需要主控制器提供的方法:
@protocol SecondaryControllerDelegate <NSObject>
- (void)secondaryController:(SecondaryController*)secondaryController
frobFooWithBar:(Bar*)myBar;
- (BOOL)secondaryController:(SecondaryController*)secondaryController
shouldTwiddleBaz:(Baz*)currentBaz;
@end
現在委託屬性添加到SecondaryController:
@interface SecondaryController : UIViewController {
id <SecondaryControllerDelegate> delegate;
...
}
// delegates are one of the few places you don't retain an object
@property (assign) id <SecondaryControllerDelegate> delegate;
...
在SecondaryController的實現部分中,合成委託屬性。 (而不是在析構函數中釋放它。)當SecondaryController需要與PrimaryController進行通信時,它應該在委託上調用適當的方法。
現在使你的PrimaryController實現SecondaryControllerDelegate協議:
@interface PrimaryController : UIViewController <SecondaryControllerDelegate> {
...
實現PrimaryController委託方法。
最後,讓您的PrimaryController自己設置爲SecondaryController的委託。你究竟如何做到這一點將取決於你是否在一個筆尖創建SecondaryController。如果你這樣做,在那裏建立連接;如果沒有,請在分配並初始化SecondaryController之後進行。
你爲什麼要做這首歌和跳舞?那麼,當你必須在小學和中學之間引入另一個控制器,或者在應用程序的其他地方使用輔助,或者甚至使用另一個應用程序(我的四個應用程序中有三個使用了一個控制器)時,你根本不需要改變SecondaryController;你只需要改變現在應該成爲代表的任何類。從長遠來看,這是一個令人難以置信的節省時間。
使用NSNotificationCenter進行對象之間的分離通信。
- 1. 多視圖iPhone應用程序
- 2. 在構建服務器上構建iPhone應用程序
- 3. 構建一個多視圖(多個頁面)Knockout.js應用程序
- 4. 測試構建在遠程mac上的iphone應用程序
- 5. 如何在Windows上使用.Net構建iphone應用程序?
- 6. 實現樹視圖狀結構在iPhone應用程序
- 7. 構建iPhone應用程序在多個設備和版本
- 8. 構建分配iPhone應用程序
- 9. 構建版本 - iphone應用程序(xcode)
- 10. 構建複雜的iPhone應用程序?
- 11. iPhone SDK:爲AppStore構建應用程序
- 12. 爲iPad構建iPhone應用程序
- 13. 構建一個iPhone應用程序與
- 14. 如何在Linux上爲iOS和iPhone構建Phonegap應用程序?
- 15. 如何讓.mobileprovision在windows上構建phonegap iphone應用程序?
- 16. 多視圖應用程序
- 17. 在iPhone/iPad應用程序中處理多個警報視圖
- 18. 在iPhone中創建電話應用程序的通話視圖
- 19. 在iPhone應用程序中創建新視圖
- 20. 在Linux上構建WinObjC應用程序
- 21. 在gradle上構建android應用程序
- 22. 在tfspreview上構建silverlight應用程序
- 23. 在iPad上構建flickr應用程序
- 24. 如何在iPad應用程序上顯示iPhone大小視圖
- 25. iPhone應用程序類視圖問題
- 26. iphone基於視圖的應用程序
- 27. 創建多個圖像視圖像照片應用程序iphone sdk
- 28. iPhone應用程序結構
- 29. 我們需要構建一款多人iPhone應用程序?
- 30. 我如何構建一個安裝在越獄iPhone上的iPhone應用程序?
對於NSNotificationCenter爲+1。 – 2010-01-08 17:16:11