2011-02-25 81 views
2

我對Objective-C和Cocoa相對來說比較陌生......我一直在試着瞭解如何在Cocoa/Cocoa Touch中正確實現MVC模式很長一段時間。 ..我理解它背後的想法;它在概念上是完全意義上的:一個模型包含數據,一個視圖是用戶看到並可以交互的視圖,而控制器則充當兩者之間的橋樑。視圖不能與模型交談,模型不能與視圖交談。得到它了。如何讓uiview與控制器交談

對我來說沒有任何意義的是如何高效地使用MVC ......如果用戶只能與視圖交互,並做一些與之交互的事情(即對於iPhone應用程序,用戶在一個iPhone應用程序中單擊/拖動UIView的子類,觸發「touchesBegan」和「touchesMoved」方法等),視圖如何將這些事件傳達給控制器?

我已經看過無數的例子和論壇在線,但還沒有找到一個簡化的通用方式來實現這一目標......我知道如何通過按鈕,滑塊和其他可以連接的控制器與控制器進行通信到一個出口,但對於那些沒有目標行動機制的東西,最好的辦法是什麼?

在此先感謝您提供有關該做什麼或在哪裏尋找的建議。

回答

1
  1. 可可這樣做的標準方式是委託模式(參見UITableViewDelegate)。你的視圖類將聲明一個委託協議,控制器將自己設置爲視圖的委託。然後,該視圖會調用您想要與控制器通信的某個委託方法。

  2. 另一種方法是自己實現視圖的目標動作機制。如果您從UIControl(僅調用sendActionsForControlEvents:)子類中獲得或多或少的免費,但實現對任何自定義類都以相同方式工作的系統非常容易。 (編輯:我想第三種方法是讓控制器觀察視圖的屬性(使用KVO)。這不能很好地傳達觸摸事件,但如果你想通知觸摸事件是一種可行的方式控制器關於狀態變化或類似的情況。)

+0

非常感謝您的明確迴應。我不知道使用委託模式是很常見的做法。我在Apple的一些示例代碼中看到了這種方法,但是假設他們將它用於超出我想要做的其他原因。再次感謝。 – ChrisB 2011-02-25 21:37:28