我想了解Objective-C在iOS應用中MVC模式的實現。UIView中的IBAction - 與MVC兼容?
現在我有一個DataProvider對象,它保存我的數據並將其提供給我的應用程序(模型)中的其他對象。此外,我有一個視圖(.xib)和一個額外的類(UIView
;我們稱之爲「ViewClass」)。我告訴我的觀點是我的ViewClass的一個子類,這樣我就可以創建IBOutlet
到我的子視圖,如標籤和IBAction
s到我的按鈕。所以這顯然是我在MVC模式中的視圖。
最後但並非最不重要的一點,我有一個ViewController
對象,它引用了我的DataProvider並保存了View的一個對象。當ViewController
加載到內存中時,它通過viewDidLoad
實例化視圖,並通過調用addSubview:(UIView *)view
將其添加到其自己的視圖中。這是我在MVC模式中的控制器。
到目前爲止好,但我不明白的是以下。根據MCV-Pattern,視圖應僅顯示由ViewController
提供的數據,該數據從模型中獲取數據。任何邏輯操作只應發生在ViewController
,因爲它負責這類任務。 但是,如果我在我的「ViewClass
」中創建IBAction
,我不得不在我的View中使用某種編程邏輯。
假設我想提交一個表單,其中包含用戶通過單擊按鈕在某個文本框中輸入的數據。在我的ViewClass
中,我有一個IBOutlet
文本框,以便稍後可以參考它並讀取用戶輸入的數據。我有一個IBAction
的按鈕,可以捕捉點擊事件。發送數據的代碼現在寫在我的視圖的IBAction
方法中,所以我在我的視圖中有程序邏輯。
我的問題:這不是違反MVC模式?
我可能經過的參考我ViewController
我的看法,而我創建視圖的一個實例,然後調用我的ViewController
的方法在IBAction
然後把它和發送數據。 但我無法真正想象這是正確的做法。或者我理解錯了什麼?
在此先感謝。
我可能還沒有理解你的例子,但你爲什麼不把IBAction放到View Controller?視圖控制器有/應該有權訪問它的所有子視圖(遞歸)。 –
因爲這是不可能的。我只能在我的View(.xib)繼承的「ViewClass」中創建IBAction。 – user3296221