0

我正在構建一個算術應用程序&其中有數字和位數NSObject的子類。它們都具有相應的視圖對象,它們採用數據源(數字或數字)和委託,視圖控制器。作爲模型對象屬性查看

我發現它有助於讓模型的視圖&一起工作,以將數字視圖設置爲其相應數字的屬性。

例如,Number類具有保存其數字的NSMutableArray屬性。

如果我想找到相應的NumberView尺寸,我寫可以在控制器中這樣寫代碼:

-(void) updateNumberViewFrameSize:(ACNumberView*) sender 
{ 
    NSUInteger i; 
    float width = 0, height = 0; 
    for (ACDigit* digit in [sender.dataSource returnNumberViewDataSource].digitArray) 
    { 
     width += digit.digitView.size.width; 
     height += digit.digitView.size.width; 
    } 
    sender.frame = CGRectMake(sender.frame.origin.x, sender.frame.origin.y, width, height); 
} 

代碼工作得很好,但我覺得這是不好的做法即使模型本身沒有使用它,也可以將該指針保持爲來自模型的視圖。

如果這是不好的做法,那麼潛在的缺陷是什麼,有沒有更好的方法來達到這種類型的目的?

回答

1

第一:你說得對。這不是好設計。

第二:您計算模型內數字視圖的大小。但是數字視圖應該知道它的大小。它通過數據源知道數字並可以獲取數字。因此它具有計算其大小的所有信息。

爲了顯示問題,想象一下(即使這種情況在iOS上不常見),您在兩個地方顯示相同的數字(=使用不同的數字視圖)。這會破壞你的型號。爲什麼?

解決方案:將所有與圖形狀態(圖形,尺寸...)相關的代碼放入數字視圖和數字視圖中。在一半的路上,這將是額外的工作。但最後,當每個代碼都遷移到視圖層時,它就像在模型中計算一樣簡單。

+0

很好的例子,爲什麼它是錯的。一個視圖可以訪問它的子視圖嗎? – chartman 2013-05-13 13:34:13

+1

@chartman是的,有[查看子視圖]。 – 2013-05-14 07:31:05

+0

你說得對,根據它必須保存的數字來計算數字視圖的大小要好得多,而不是從視圖中獲取數據 – chartman 2013-05-15 01:21:35