2

概述iOS的MVC架構 - 比視圖控制器

  • 我做使用MVC架構的的iOS項目視圖其他單獨的視圖。請原諒我的無知,我只是困惑,我正在尋找一個好的設計。
  • 我打算使用的視圖將包含一些按鈕以及一些標籤和文本字段。我的看法不需要任何自定義 執行drawRect。
  • 我所有的邏輯爲需要時按下按鈕或發生事件是在我的視圖控制器

我有幾個疑問做什麼:

  1. 爲在上面的場景中,創建一個單獨的視圖(視圖控制器視圖以外的視圖)是否更好(最佳做法)?如果是這樣,爲什

  2. 除了繪製和顯示視圖(在我的項目中,我沒有太多內容)視圖的實現代碼 還包含什麼內容?

  3. 我想禁用一組按鈕,當用戶觸摸一個文本字段並且鍵盤出現時。

    a)因此,我應該在獨立視圖的實現(問題1中創建的視圖)中放置禁用某些按鈕的邏輯?

    b)從我的父視圖(在問題1中創建的視圖),我可以創建網點到按鈕(這是子視圖)以禁用某些按鈕?我無法做到這一點。或者我應該使用方法subviews並通過我正在尋找的按鈕進行循環?

我的理解

  1. 模型包含的數據

  2. 視圖負責顯示,不應該包含業務邏輯 。

  3. 視圖控制器是模型和視圖之間進行交互的唯一一個包含業務邏輯

回答

4
  1. 沒有必要創建一個單獨的視圖 - 視圖控制器的視圖(通常只是一普通的UIView)當然可以包含你的按鈕和文本字段。如果你確實想將其中的一些放在一個單獨的容器中(也許這樣你可以將它們作爲一個組來移動),那麼你可以使用一個普通的舊UIView。

  2. 視圖是響應者,所以如果你想做任何特殊的觸摸處理,UIView子類可以覆蓋觸摸處理方法。

  3. a)通常在視圖控制器中放置管理視圖的代碼(例如禁用按鈕)。 b)同樣,您通常會將按鈕的插口放在視圖控制器中。

當人們談論「商業邏輯」,他們通常指的需要的維護和對數據,應用程序涉及操作邏輯。這種事情通常最好放在模型中。另一方面,管理視圖的代碼(如啓用或禁用按鈕或將數據從模型轉換爲視圖(反之亦然))屬於視圖控制器。

+1

真棒解釋,謝謝一噸,真的很好解釋! – user1046037 2012-03-15 05:09:32

0

Q1。對於上面的場景,創建一個單獨的視圖(視圖控制器視圖以外的視圖)是否更好(最佳做法)?如果是這樣,爲什

如果您通過Interface Builder創建視圖,那麼我認爲這是一個單獨的視圖。 ;)但是,如果您嘗試以編程方式創建視圖層次結構而不使用n/xib,則可以將所有視圖佈局放在loadView方法中,然後填充viewDidLoad中的數據,這就是View-Controller所做的。此外,您可以創建一個UIView類來實現視圖的佈局,就像n/xib一樣,但是以編程方式。

作爲DOC說,

...一張可以合併由物體起的MVC角色,使得一個對象,例如,滿足這兩個控制器和查看角色的在這種情況下,它會被稱爲視圖控制器。 ...

...視圖控制器是一個主要關注視圖層的控制器。它「擁有」界面(視圖);其主要職責是管理界面並與模型進行交流。涉及視圖中顯示的數據的操作方法通常在視圖控制器中實現。 NSWindowController對象(也是文檔體系結構的一部分)是視圖控制器的一個示例。 ...

在可可的MVC是一個litte不同於你所知道的。您可以參考官方文檔HERE


Q2。除了繪製和顯示視圖(在我的項目中,我沒有太多內容),視圖的實現代碼還應包含哪些內容?

您可以自定義視圖,例如,爲您的按鈕設置文本顏色或字型等


Q3.a.所以,我應該將在單獨的視圖的實施禁用某些按鈕(在問題1中創建視圖)

這是更好地把邏輯控制器(或視圖 - 控制器)的這種邏輯,就像MVC喜歡。

Q3.b.從我的父視圖(問題1中創建的視圖),我可以創建插座到按鈕(這是子視圖)以禁用某些按鈕?我無法做到這一點。或者我應該使用方法子視圖並通過我正在尋找的按鈕進行循環?

您可以爲您的按鈕標籤setTag:),並得到你想要的正確的。但請記住,首先,您需要讓按鈕顯示爲父級。

+1

感謝您的回覆,我喜歡setTag建議來識別子視圖。 – user1046037 2012-03-15 05:11:23

+0

@ user1046037不客氣:) – Kjuly 2012-03-15 06:05:05