2012-03-15 82 views
0

我試圖創建一個通用的,可重用的視圖,看起來像一個內襯的記事本。我決定處理問題的方式(在幾次設計迭代之後)是創建一個由UITextViewUIView組成的自定義視圖。我應該採用哪種設計方法來創建此自定義視圖?

當用戶滾動瀏覽文本行時,我想讓UIView跟蹤滾動方向。 這裏的關鍵是:在我的自定義視圖中,我需要更改一個子視圖的位置以響應另一個子視圖中的事件。東西需要協調這些變化...

現在,我想採取的一種方法是使用MVC設計模式。視圖控制器可以處理所有事件並相應地移動子視圖。這個MVC可以嵌入到其他MVC中。

通常,當使用MVC設計模式時,控制器將處理用戶事件並操縱模型和視圖。但是,我的自定義視圖沒有模型 - 我試圖做的是讓視圖管理它自己的子視圖,當用戶做一些滾動操作時。在我看來,是MVC設計模式是不適合在這裏有兩個原因:

  1. 沒有一個模型或邏輯特定於它在使用的程序
  2. 似乎對我來說,視圖應該負責處理改變視圖應該出現的用戶事件。

...但我可能是錯的,這就是我尋求幫助的原因。對於那些比我更有經驗並且可能已經做過很多次的人來說,這個問題是:

在這種情況下什麼類型的設計模式是合適的? MVC或...

+0

您可以購買預先製作的視圖。這是一個付費實現:[DTNotePadViewController](http://www.cocoanetics.com/parts/dtnotepadviewcontroller/)。 – JoePasq 2012-03-15 04:24:57

+0

是的...這正是我想要做的。除此之外,我更感興趣學習如何設計此人創建的自定義記事本視圖。至於保存筆記等,我會爲此創建一個視圖控制器,但我在設計自定義內襯記錄視圖並定義它的行爲方面有點失落。 – 2012-03-15 04:31:27

+0

我認爲他的博客上有一些註釋。不確定他私密或公開的內容。 – JoePasq 2012-03-15 04:35:12

回答

1

你想要一個視圖來管理自己的子視圖嗎?那就這樣做!那麼如果這種模式沒有TLA呢?

一個典型的方法是在您的容器視圖中實現layoutSubviews。檢查其當前狀態或窗口中其他視圖的狀態(例如滾動視圖的contentOffset),然後適當設置其子視圖。 (調整它們大小,重新定位它們等)

只是儘量保持它的快速,因爲它可能會頻繁地調用layoutSubviews

+0

Kurt - 你能用'容器視圖'來表達你的意思嗎?我想我得到的是,你是否建議創建一個UIView子類,它只是管理我在'layoutSubviews'中添加的子視圖?還有一個問題:將此容器視圖設置爲「UIScrollViewDelegate」是否不合理,以便在用戶滾動時可以獲得回調? ......感謝您的幫助 - 我基本上在尋找解決這個問題的常用方法,以免我重新發明輪子。 – 2012-03-15 20:33:36

+0

你有正確的想法,是的。你甚至可能甚至不需要使視圖成爲'UIScrollViewDelegate' - 滾動視圖可能會通過'setNeedsLayout'使佈局無效,這樣你的視圖的'layoutSubviews'就會自動被調用。 (如果沒有,當需要時很容易調用'setNeedsLayout')。試試看。 – 2012-03-16 04:11:58

相關問題