我正在創建一個簡單的iOS遊戲,該遊戲有一個跟蹤用戶分數並將其呈現在屏幕角落的UILabel中的計數器。當遊戲發生某些事情時,它會切換到屏幕上的遊戲。然後,我想在新視圖中的標籤中顯示前一個視圖中標籤的內容,隨着玩家評分。將標籤的內容從一個視圖控制器傳輸到另一個視圖控制器
我覺得應該有一個簡單的方法來做到這一點?
在此先感謝!
我正在創建一個簡單的iOS遊戲,該遊戲有一個跟蹤用戶分數並將其呈現在屏幕角落的UILabel中的計數器。當遊戲發生某些事情時,它會切換到屏幕上的遊戲。然後,我想在新視圖中的標籤中顯示前一個視圖中標籤的內容,隨着玩家評分。將標籤的內容從一個視圖控制器傳輸到另一個視圖控制器
我覺得應該有一個簡單的方法來做到這一點?
在此先感謝!
問題的根本原因在於您已將遊戲邏輯嵌入您的用戶界面。評分不是用戶界面的一部分,但你已經把它放在了那裏。
如果您的遊戲真的是簡單,請將屬性添加到跟蹤分數的應用程序委託。用戶界面的每個部分都可以在需要時訪問該屬性。
只要你超越了最簡單的遊戲,你應該把你的遊戲邏輯分解成它自己的類。該班負責管理遊戲狀態。當你開始一個新遊戲時將它實例化,並且你可以將它傳遞給查看控制器,創建一個共享實例等。
我建議讀一下MVC。
只是使標籤一個@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
一步之遙,從你的觀點一秒鐘。您的標籤和任何其他視圖都是展示數據,而不是存儲數據的地方。你想在屏幕上分享的是比分,這是你球員狀態的一部分。
創建一個Player
對象。給它一個score
屬性。將相同的Player
實例傳遞給兩個視圖的控制器。現在你有一個由多個控制器共享的模型,並在許多視圖中呈現。任何一個控制器都可以更新模型,另一個可以訪問新的狀態以便在其視圖中顯示。
好的,我會盡力去做。謝謝你的幫助喬納! – George
好的,謝謝你的幫助。我認爲我的遊戲很可能足夠簡單,可以將遊戲邏輯保留在用戶界面中,但我肯定會考慮在將來創建一個單獨的課程。我可以問一下,按照我的方式做這件事有什麼問題? – George