2010-02-05 74 views
-1

如何更改當按鈕處於另一個視圖時顯示按鈕的圖像。如何更改另一個視圖中按鈕上的圖像

+0

需要更多的細節/代碼示例。 – 2010-02-05 16:12:25

+0

我試圖編輯這個,但我不確定我是否理解這個問題。你問在當前沒有顯示的視圖中如何更改按鈕的圖像?或者你想在另一個視圖中根據某個動作或事件更改圖像嗎? – TechZen 2010-02-05 21:46:16

回答

1

NSNotificationCenter是一種很好的視圖間通信機制,不需要引入依賴關係。 KVO也可能工作得很好,具體取決於你在做什麼。

1

不知道我完全理解了這個問題,但是您通過將信息存儲在數據模型中來在視圖控制器和它們的視圖之間傳遞信息。

假設你有兩個視圖A和B.每個視圖都有一個視圖控制器Ac和Bc。假設您想根據用戶在A中設置的某些設置來設置B中按鈕的圖像。例如,根據用戶是否在視圖A中選擇了女性的男性,視圖B中的按鈕的背景將是藍色或粉紅色。 (...並且沒有,我想不出一個更好的例子,起訴我)

該信息屬於數據模型的範圍,因爲B中的按鈕將改變其背景的真正原因是由於某些數據由用戶的選擇創建。數據模型應該位於任何視圖控制器的獨立對象中。它可以是從簡單的數組到完整的核心數據圖的任何內容。它的設計應該使其對任何接口一無所知。

數據模型對象需要放置在控制器可以訪問的地方。快速和骯髒的方法是將數據模型對象停放在應用程序委託中。最好的方法是爲它創建一個單例。

這裏的關鍵概念是視圖A和視圖B不必知道對方的存在。他們各自的視圖控制器Ac和Bc也不必知道彼此。每個視圖控制器只是獨立地將數據寫入/讀取到數據模型。假設你的應用收集某個人的數據,如年齡,性別,身高,體重等,然後根據數據爲用戶提供一些選擇。假設視圖A收集數據並且視圖B顯示它。的流動將是這樣的:

  1. 用戶更改控制在視圖A的UI
  2. 控制器AC讀取這些變化,諸如用戶的性別,從其視圖A.
  3. Controller Ac調用數據模型並將A的信息寫入它。
  4. 控制器Ac關閉其視圖並向其他控制器交出控制權。
  5. 任何數量的事情都可能發生。包括應用程序退出和啓動(如果數據模型保存到持久存儲中)。
  6. 在某些時候,視圖B是需要的。控制器Bc訪問數據模型並從中讀取數據。然後它在Bc中填充/設置UI以匹配該數據。根據存儲在數據模型中的用戶的性別,它將按鈕的圖像設置爲藍色或粉紅色。

信息流轉A→Ac→dataModel→Bc→B。

這就是所有信息在iPhone使用的模型 - 視圖 - 控制器設計模式中的界面元素之間傳遞的方式。關鍵的想法是,控制器只需要知道dataModel,而不需要其他東西。應用程序狀態的每一次變化反映了數據模型的變化。

(蕩,我必須停止寫作答案之前喝這麼多咖啡。)

相關問題