2015-05-21 44 views
2

我當時在一個客戶項目中工作。我在ViewDidLoad裏面寫了很多視圖定製代碼。我有用於數據存儲和訪問的模型。 該項目工作正常。他們聘請了一位新的iOS開發人員,他表示代碼不符合MVC體系結構。問爲什麼?他說這些意見是在viewDidLoad內部創建的,這是該類的控制器,因此它不是可接受的代碼。我們應該如何處理它真正動態的視圖,並且不能使用Storyboard創建。在viewDidLoad中編寫代碼是否違反了MVC體系結構?

+0

你問他的意見嗎? – Azat

+0

您可以爲您動態創建的每個視圖創建類。那麼你很容易將它們導入你的控制器。 –

+0

他遠程工作。但是拒絕代碼不在MVC中的唯一原因是我在視圖DidLoad中創建了一些視圖。我唯一的疑問就是:在iOS應用程序開發中,如果我在ViewDidLoad中編寫視圖創建代碼,它是否違反了MVC架構? –

回答

1

你可以在這樣的控制器和視圖之間區別 -

使用- (void)loadView {}委託方法從viewcontroller加載你的看法。

假設你有一個視圖類 -

CustomView.h
CustomView.m -

- (id)init { 

    return [self initWithFrame:CGRectZero]; 

} 

- (id)initWithFrame:(CGRect)frame { 

    self = [super initWithFrame:frame]; 
    if (self) { 

     // Initialization code 
     self.backgroundColor = [UIColor greenColor]; 
     [self addSubview:self.centerView]; 

    } 
    return self; 
} 

現在,在您的ViewController -

- (void)loadView 
{ 
    self.view = [[CustomView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
} 

請參閱以下網址瞭解更多詳情 - http://matthewmorey.com/creating-uiviews-programmatically-with-auto-layout/

希望這可以幫助你。

3

我的回答是

從蘋果DOC

控制器對象

控制器對象充當一個或多個應用程序的查看對象以及一個或多個之間的中介它的模型對象。因此,控制器對象是視圖對象通過其來了解模型對象變化的渠道,反之亦然。控制器對象還可以執行應用程序的設置和協調任務,並管理其他對象的生命週期。

我認爲控制器有責任管理視圖的樣子。

viewDidLoad,在這裏寫一次性查看定製代碼很好。

但是,如果你寫了很多配置代碼到一個視圖。我認爲最好使用UIView的子類。這使您的代碼清晰易於調試和維護。

+0

這就是我的想法。很抱歉,由於低信譽無法投票。 –

+0

@DipeshPokhrel,但如果您的答案正確,您可以接受該答案。 WenchenHuang你的大膽__NO__答案是什麼問題? OP的問題是「我們應該做什麼?」 – Azat

+0

他的問題是「在viewDidLoad中編寫代碼是否違反了MVC架構?」 – Leo

0

理想情況下,您的主視圖(由viewcontroller中的self.view訪問的視圖)有一個專用類 - 從UIView派生。

這裏面的視圖類(說Myview.m) - 您將創建不同的視圖方式中的子視圖 - 如init(用於子視圖的實例),layoutsubviews(用於子視圖的框架設置)和drawrect(任何圖形繪製等)如果視圖有NIB,一些處理也會進入awakeFromNib。