我有一個容器視圖控制器與3個子UIViewController子類(addChildViewController添加)。我想讓我的一個子視圖控制器在從我的容器視圖控制器中刪除某些內容時執行某些操作。我很難理解這種溝通應該如何發生。如果我嘗試創建一個委託,我在我的子視圖控制器中出現錯誤,因爲我將這兩個子類相互導入。容器視圖控制器與childViewControllers通信
回答
這聽起來像你有問題編譯你的應用程序,因爲相互.h文件importing
彼此對吧?
編輯:在再次閱讀你的問題,我不是100%清楚哪個瀏覽器需要調用哪些其他一個。如果我在我的解決方案中混合使用父視圖控制器和子視圖控制器的 角色,只需切換 即可。下面的技巧讓你任意兩個視圖 控制器(父母與子女,兄弟姐妹和兄弟姐妹等)
有許多方法來處理這之間的通信。如果你想留在一個delegate
模式,你可以簡單地重寫頭,以避免#import
在.h文件之一:
ParentViewController.h:
#import "ChildViewController.h"
@interface ParentViewController: UIViewController {
@private
ChildViewController* childVc;
}
- (void) doSomething;
ChildViewController.h
@class ParentViewController; // NOT #import!
@interface ChildViewController: UIViewController {
@private
ParentViewController* parentVc;
}
ChildViewController.m
#import "ParentViewController.h"
這應該避免循環依賴,使您的應用程序無法編譯。
現在,雖然上述工作,我可能會選擇另一種解決方案,爲了清潔。使用。家長可以實現協議,那麼孩子只需要有一個實現該協議的委託:
#import "MyProtocol.h"
@interface ParentViewController: UIViewController<MyProtocol> {
}
- (void) doSomething;
在MyProtocol.h:
@protocol MyProtocol
- (void) doSomething;
@end
在ChildViewController.h
#import "MyProtocol.h"
@interface ChildViewController: UIViewController {
@private
id<MyProtocol> delegate;
}
@property (nonatomic, assign) id<MyProtocol> delegate;
然後
而且在ChildViewController.m:
[delegate doSomething];
或者,您可以避免使用完全代表和communicate between the controllers using NSNotificationCenter
,它們將它們分離一點,並避免編譯器循環(雙向依賴性)。
你不能只是去:
MyChildViewController *myChildViewController = (MyChildViewController *)[self.childViewControllers objectAtIndex:0];
[myChildViewController doWhatever];
? 這應該讓你在數組childViewControllers(它是UIViewController上的一個屬性)的第一個索引處發送子視圖控制器。
我可以,但我看不出這是比簡單地定義嵌套視圖控制器,並使用它們太大的不同。如果這不會破壞任何設計規則,我將非常樂意實施這種方法。 –
我實際上無法說出最佳做法。 – geraldWilliam
- 1. 從子視圖控制器到容器視圖控制器的通信
- 2. iOS:與父視圖控制器通信
- 3. 主視圖控制器 - >詳細視圖控制器通信
- 4. 控制器視圖通信,Ruby on Rails
- 5. 視圖控制器之間的通信
- 6. MVC:控制器和視圖通信(C#)
- 7. 多個導航控制器中的視圖控制器通信
- 8. iOS - 視圖控制器與容器視圖 - 隱藏鍵盤
- 9. 如何連接容器視圖控制器與視圖
- 10. 如何顯示容器視圖視圖控制器和隱藏容器視圖視圖控制器
- 11. 從另一個視圖控制器通知視圖控制器
- 12. iOS - 容器視圖控制器Swift
- 13. 容器視圖控制器編程
- 14. 在容器視圖控制器
- 15. 動畫容器視圖控制器
- 16. 容器視圖控制器中的IBAction
- 17. 容器視圖控制器示例
- 18. 自定義容器視圖控制器
- 19. 從容器視圖中的視圖控制器中,如何訪問包含容器的視圖控制器?
- 20. cocos2d與視圖控制器
- 21. Cocos2d與視圖控制器
- 22. Objective C與另一個視圖控制器通信另一個視圖控制器
- 23. 從當前視圖控制器的子視圖控制器導航到詳細信息視圖控制器
- 24. iOS視圖控制器遏制|子視圖控制器通過觸動父視圖控制器
- 25. iOS5內容視圖控制器阻止自定義容器視圖控制器上的滾動視圖
- 26. 在tabbar控制器中的視圖控制器如何通信-iphone
- 27. ScrollView中的子視圖控制器和Superview控制器之間的通信
- 28. 容器視圖控制器 - 通知動作的母公司
- 29. 子視圖控制器通知根視圖控制器加載另一個子視圖控制器
- 30. 導航控制器與容器視圖中的靜態表
NSNotifications非常棒!謝謝! –
我同意在這裏使用協議。孩子不應該參考父母。但是,這不是使用NSNotificationCenter的合適位置。您將使用它來向多個對象廣播消息,而不僅僅是容器中的父對象。代表團是正確的解決方案。 – smileBot