2011-11-01 66 views
2

我正在創建一個簡單的iOS遊戲,該遊戲有一個跟蹤用戶分數並將其呈現在屏幕角落的UILabel中的計數器。當遊戲發生某些事情時,它會切換到屏幕上的遊戲。然後,我想在新視圖中的標籤中顯示前一個視圖中標籤的內容,隨着玩家評分。將標籤的內容從一個視圖控制器傳輸到另一個視圖控制器

我覺得應該有一個簡單的方法來做到這一點?

在此先感謝!

回答

0

問題的根本原因在於您已將遊戲邏輯嵌入您的用戶界面。評分不是用戶界面的一部分,但你已經把它放在了那裏。

如果您的遊戲真的是簡單,請將屬性添加到跟蹤分數的應用程序委託。用戶界面的每個部分都可以在需要時訪問該屬性。

只要你超越了最簡單的遊戲,你應該把你的遊戲邏輯分解成它自己的類。該班負責管理遊戲狀態。當你開始一個新遊戲時將它實例化,並且你可以將它傳遞給查看控制器,創建一個共享實例等。

我建議讀一下MVC

+0

好的,謝謝你的幫助。我認爲我的遊戲很可能足夠簡單,可以將遊戲邏輯保留在用戶界面中,但我肯定會考慮在將來創建一個單獨的課程。我可以問一下,按照我的方式做這件事有什麼問題? – George

0

只是使標籤一個@property和使用self.navigationController.presentingViewController或類似的東西來訪問的第一個視圖控制器:

@interface ViewControllerOne : UIViewController { 
    IBOutlet UILabel *myLabelOne; 
} 

@property (nonatomic, retain) IBOutlet UILabel *myLabelOne; 

@end 


@interface ViewControllerTwo : UIViewController { 
    IBOutlet UILabel *myLabelTwo; 
} 

// myLabelTwo doesnt need to be a property, it could just be an ivar. Up to you. 
@property (nonatomic, retain) IBOutlet UILabel *myLabelTwo; 

@end 

@implementation ViewControllerTwo 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.myLabelTwo.text = [(ViewControllerOne *)self.navigationController.presentingViewController myLabelOne].text; 
} 


@end 

UINavigationController Class Reference
UIViewController Class Reference
Properties in Objective-C 2.0

+0

好的,謝謝。我試過這個,但'self.endScore.text = [(Meteor_FieldViewController *)self.navigationController.presentingViewController score] .text; '給了我錯誤_會員參考基本類型'空白'不是一個結構或union_ – George

+0

這是一個奇怪的錯誤..你可以把更多的代碼和完整的錯誤/堆棧跟蹤在你的問題,所以我可以看到它好一點? – chown

+0

對不起,我不完全清楚你的意思? – George

0

一步之遙,從你的觀點一秒鐘。您的標籤和任何其他視圖都是展示數據,而不是存儲數據的地方。你想在屏幕上分享的是比分,這是你球員狀態的一部分。

創建一個Player對象。給它一個score屬性。將相同的Player實例傳遞給兩個視圖的控制器。現在你有一個由多個控制器共享的模型,並在許多視圖中呈現。任何一個控制器都可以更新模型,另一個可以訪問新的狀態以便在其視圖中顯示。

+0

好的,我會盡力去做。謝謝你的幫助喬納! – George

相關問題