對於iOS開發,如果您在運行時創建並添加子視圖,您將如何允許它與視圖控制器進行通信?由於子視圖未在nib內實例化,因此無法使用Interface Builder將連接拖至控制器上的IBAction
方法。我看不到一個顯而易見的方式從視圖中獲取控制器的句柄。或者我以錯誤的方式看待它,而應該通過NSNotificationCenter
間接與它進行溝通?運行時創建的子視圖如何與視圖控制器進行通信?
回答
回答我自己......我是從父視圖中創建這些子視圖所以沒有訪問控制器有兩種,所以從其他答案的代碼示例self
是不可能的。但是在考慮了一下之後,我決定將代碼移入控制器本身,但是選擇使用委託而不是目標操作,因爲這是一種自定義消息,而不僅僅是一個簡單的觸摸事件。感謝那些幫助過的人。
你想溝通什麼? IBActions是預先定義好的(或者是新定義的,如果你想要經歷添加UI元素到IB的麻煩)UI元素可以在某些交互時觸發某個選擇器,因爲這樣可以始終以編程方式產生相同的效果...例如,以在運行時創建一個UIButton你可以做..
UIButton *button=[[UIButton alloc] initWithFrame:frame];
[button addTarget:self action:@selector(myAction:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
任何東西,你可以在Interface Builder中你可以做的編程方式,以及...你只需要尋找將結合行動方法UI元素...希望這有助於。
看完你的評論: 你可以考慮從視圖控制器而不是視圖創建按鈕,可能是正確的方法來做到這一點(不知道你的情況,但)...如果不是,那麼無論是視圖可以處理事件並使用協議將事件委託給視圖控制器,或者您可以使用協議作爲UI元素的目標註冊,解決問題的方法有很多,您的情況如何?
好的,我意識到我遺漏的關鍵細節。這些子視圖是從另一個視圖創建的,而不是從控制器本身創建的。所以在那個時間點沒有可用的控制器。這是否會改變你的答案? – Marplesoft 2010-09-30 21:26:02
大多數視圖不直接與視圖控制器通信。相反,它們連接到IBOutlet,或者它們使用target-action在視圖控制器上調用方法。
對於前者,只需像通常那樣聲明一個IBOutlet屬性,並在創建視圖後對其進行設置。 (請注意,從技術上說,你不需要因爲你沒有將在IB連接的IBOutlet中的關鍵字,但我不認爲這會傷害任何東西。)
self.myViewOutlet = myNewView;
如果你的UIView的是UIControl一個子類,使用addTarget: action: forControlEvents:可以在控件上發生某些事件時調用視圖控制器的方法。
[myNewControl addTarget:self action:@selector(mySelector:) forControlEvents:UIControlEventTouchDragInside];
- 1. 運行時創建的子視圖如何與視圖控制器進行通信?
- 2. emberjs如何在控制器和視圖之間進行通信?
- 3. 運行時視圖控制器
- 4. 模型與視圖控制器進行通信的建議方式是什麼?
- 5. 2個控制器如何與asp.net中的1個視圖進行通信mvc
- 6. 從子視圖控制器到容器視圖控制器的通信
- 7. iOS:與父視圖控制器通信
- 8. 主視圖控制器 - >詳細視圖控制器通信
- 9. 在視圖控制器之間進行通信
- 10. 創建視圖控制器
- 11. iphone - 在segue後與之前的視圖控制器進行通信
- 12. 將公共視圖控制器的流行視圖控制器
- 13. 在視圖控制器內創建多個子視圖
- 14. 如何創建一個視圖添加到視圖控制器?
- 15. 視圖控制器之間的通信
- 16. 從當前視圖控制器的子視圖控制器導航到詳細信息視圖控制器
- 17. 子視圖控制器通知根視圖控制器加載另一個子視圖控制器
- 18. 如何使用委託在2個視圖控制器之間進行通信?
- 19. 視圖在運行時不會創建
- 20. 在運行時創建視圖頁面
- 21. 如何在Xcode中的任何視圖控制器上進行靜態視圖?
- 22. 父視圖控制器如何通知其子視圖控制器已自行刪除?
- 23. 控制器視圖通信,Ruby on Rails
- 24. MVC:控制器和視圖通信(C#)
- 25. iOS視圖控制器遏制|子視圖控制器通過觸動父視圖控制器
- 26. 使用視圖控制器子視圖
- 27. 如何爲所有視圖控制器創建通用的UITableView?
- 28. 如何在運行時動態創建圖像視圖?
- 29. 視圖如何與模型進行通信?
- 30. GWT與MVP:如何在2個視圖之間進行通信?
事實證明,這與今天早些時候提出的另一個問題完全相同。但是,*問題的標題完全是誤導性的,直到我現在編輯它爲止。 – bbum 2010-09-30 21:20:51