2012-08-01 42 views
0

作爲一項練習,我正在爲iPad設計一個簡單的繪圖應用程序。 我正在使用UISplitView,圖紙視圖爲詳細視圖。在主視圖控制器中,我呈現(在表格視圖中)到目前爲止繪製的形狀列表。以下情況的適當設計模式是什麼?

用戶可以編輯或刪除主視圖控制器中的任何形狀,也可以通過在詳細視圖控制器中觸摸它來選擇和編輯形狀。

爲了通知每個視圖控制器所做的更改,我想到了使用委託,但我不確定這是否是正確的使用模式。

首先,據我所知,當某個對象遇到一個他們不知道如何處理的事件時,應該使用代表。在這種情況下,他們將所有信息傳遞給委託人並讓其處理事件。這不是這種情況,因爲兩個視圖控制器都需要對這些信息做些什麼。在這裏使用委託會導致代碼重複。

我正在考慮不使用委託的另一個原因是,將來我可能希望其他視圖控制器獲取圖形中更改的信息。我可以使用多個代表(這是一般的良好習慣嗎?),但我不確定這是一個好的解決方案。

我應該考慮其他解決方案嗎?

回答

0

相反,我認爲代表可能是在這裏使用正確的模式 - 你不一定委託只有當你無法處理事件(儘管這可能一個情況下,你會委派)。

相反,考慮委託人從另一個對象獲取信息的方式,當你只是不知道該對象可能是什麼。例如,Apple在使用UITableView時使用委託模式;在這個委託協議中,表格視圖非常清楚在每種情況下要做什麼,但是當某些行爲即將發生時,仍然會通知您的代碼。我認爲這與你的情況很相似。 (請注意,在UITableView的「數據源」中也存在一個與您的問題的假設並行的表,其中表視圖確實需要一些信息)。

另一種技術,如果您真的死了,反對代表,將是使用通知。您可以讓每個控制器訂閱特定通知,然後在可觀察到的更改發生時讓您的形狀(或詳細視圖控制器)發佈NSNotification的實例。這樣,您仍然可以處理髮生在不同控制器中的事件,但不需要維護委託列表。對於代碼複製,只要考慮重構,當你開始遇到你會複製的情況;也許你應該爲公共代碼設計一個委託或通知訂閱者對象,然後在每個其他控制器中只做類特定的事情?

相關問題