2010-07-06 29 views
1

我一直在通過一本書和教程來學習Objective-C,雖然我學到了很多東西,可以做很多我想要的東西,但我仍然很難獲得基本結構我的程序正確。這是我想要做的一件具體事情,但我最終迷失了方向並感到困惑。建立客觀c程序的基礎知識

我想生成一個卡對象(我認爲)應該是UIView的子類。我希望能夠製作一張新卡,設置其大小並在其中放置一些子視圖。我也希望能夠改變大小和移動。

我可以讓一個UIView做一些這些事情,並用塊進行動畫處理,但是我對將代碼片放在哪裏感到困惑。我從一個基於視圖的模板開始,並創建一個UIView的新子類。我想讓視圖控制器請求卡片並能夠接受用戶輸入來操縱卡片。我可以製作按鈕並將它們連接到IBActions上,但是我應該將更改大小並將方法移入卡片對象或視圖控制器中?我希望能夠這樣說:宣佈一張新卡片 - 告訴卡片在按下按鈕時「移動到此處」等。

我知道這聽起來像是一個非常普遍的問題,而我不是尋找某人爲我編寫我的代碼,但我只想要一些一般的(或特定的!)建議。

回答

2

一般來說,你的軟件應該遵循model-view-controller pattern

翻譯,這可能意味着什麼的視圖應該存儲在視圖中。即卡片的面部圖片,卡片的值等。

所有必須處理關於卡片的邏輯,它發生什麼,發生什麼等的東西都應放置在控制器中。

最後,應該在模型中分別處理一個包含卡片和其他關於排序,混洗,交易等的邏輯的「Deck」類。

在理想情況下,這是程序流是如何工作的:

  1. 用戶按壓View的按鈕
  2. 查看被連接到了一種方法,所述控制器
  3. 控制器評估程序的狀態,並調用一個方法在模型中(如交易)
  4. 該模型執行一些邏輯並返回信息
  5. 控制器評估模型的返回並更新視圖
  6. 視圖重繪自己基於從控制器

這是一個非常基本的解釋,但希望不夠好,讓你擺脫困境的新的更新。我強烈建議閱讀Apple's MVC documentation.

0

感謝您的建議,斯蒂芬。我一直在閱讀MVC文檔並試圖吸收它,但它很多!

讓我解釋一下我的應用程序的部分,到目前爲止,看看如果你覺得我讓他們做正確的事...

我做了一個視圖基於應用程序開始與所謂的燒錄卡,所以我做了viewConroller (object?)以及.xib。據我所知,這封裝了我的觀點和我的控制器。因此,這裏是我的結構,我認爲:

電腦板 - FlashCardViewController 有一種從我的.xib文件中的按鈕操作方法

查看 - 的.xib 有請求的卡一副新牌每個基本按鈕數學運算符,以及從目前的甲板得到一張新卡,和字段用於顯示我的燒錄卡信息(操作數,運營商,結果)

型號 - 卡 的UIView的子類。這具有操作數等的屬性,以及它從UIView繼承的東西。 - 甲板 NSObject的一個子類。這有一個叫做卡片的屬性,它是一個NSMutableArray。它有一種基於來自按鈕標題的操作符生成一副具有所有可能的操作數值的牌的方法。如果你點擊+按鈕,它會製作一副+閃存卡。它還有一種從甲板上選擇一張牌的方法 - 你將甲板傳遞給它,並且它返回一個隨機的卡牌對象,並從甲板上移除卡牌。

這一切工作正常 - 我可以生成新的甲板,並獲得一張卡。然後我使卡的initWithFrame方法定義了一個框架,當我從控制器的當前卡組中獲得一張新卡時,我將該卡的視圖添加到控制器的視圖中。它顯示很好。

我現在的問題是 - 如果我想讓卡片在視圖中的其他位置移動,該方法應該在控制器中嗎?或甲板?或卡?我在正確的地方有零件嗎?當我通過IBAction方法在控制器中生成一個新的卡對象(通過從卡座中選擇它)時,我可以通過控制器中的另一種方法訪問該卡 - 它是否可用?例如,如果我製作了另一個按鈕,將卡移動到屏幕上...

感謝您閱讀我的羅嗦答覆!任何意見仍然感激!

+0

移動卡片應該在控制器中。嘗試'TouchUpOutside'選擇器。將Card設爲UIButton的子類(設置自定義顯示和圖像)可以更好地服務,以便輕鬆響應觸摸事件。 如果控制器具有甲板作爲成員,則可以從控制器中的所有功能訪問該成員。 – 2010-07-07 18:51:19

+0

對我來說,移動方法是控制器的一部分是合理的 - 我是否正確地假設控制器中的一種方法返回的Card對象可以被同一控制器中的其他方法訪問?也就是說,如果一種方法返回一張卡片,另一種方法能夠移動該卡片,而另一種方法能夠解除該卡片? – Steve 2010-07-07 21:28:30

+0

關於使用按鈕來模擬我的卡... 我能夠以編程方式配置按鈕上的圖像嗎?我最終想用閃卡組件構建一張卡片圖像。有數百種組合。有了UIView子類,我想我可以使子視圖來組成我的卡。 – Steve 2010-07-07 21:29:01