我目前正在为我的第一款iPhone游戏设计结构并遇到问题。目前,我有一个' MenuViewController'这允许你选择要玩的关卡和一个LevelViewController'水平在哪里。
' MenuViewController'上的UIButton
触发对LevelViewController'。
' LevelViewController'上的UIButton
触发以下方法返回' MenuViewController':
-(IBAction)back:(id)sender //complete
{
[self dismissModalViewControllerAnimated:YES];
}
问题是,我在菜单页面上有一个UILabel
,用于打印玩家拥有的总积分数。每当我从关卡中返回菜单时,我希望此标签自动更新。目前,标签是以编程方式在“MenuViewController':
-(void)viewDidLoad {
[super viewDidLoad];
CGRect pointsFrame = CGRectMake(100,45,120,20);
UILabel *pointsLabel = [[UILabel alloc] initWithFrame:pointsFrame];
[pointsLabel setText:[NSString stringWithFormat:@"Points: %i", self.playerPoints]];
[self.pointsLabel setTag:-100]; //pointsLabel tag is -100 for id purposes
}
self.playerPoints是MenuViewController的整数属性
有没有办法可以更新标签?提前谢谢!
答案 0 :(得分:9)
这是授权的完美案例。当LevelViewController完成后,它需要触发一个在MenuViewController中处理的委托方法。这个委托方法应该关闭模态VC,然后做你需要做的其他事情。提交VC通常应该解除它所呈现的模态视图。
以下是如何实现此目的的基本示例:
LevelViewController.h(在接口声明之上):
@protocol LevelViewControllerDelegate
-(void)finishedDoingMyThing:(NSString *)labelString;
@end
ivar部分内的相同文件:
__unsafe_unretained id <LevelViewControllerDelegate> _delegate;
以下ivar部分的相同文件:
@property (nonatomic, assign) id <LevelViewControllerDelegate> delegate;
在LevelViewController.m文件中:
@synthesize delegate = _delegate;
现在在MenuViewController.h中,#import "LevelViewController.h"
并将自己声明为LevelViewControllerDelegate的委托:
@interface MenuViewController : UIViewController <LevelViewControllerDelegate>
现在在MenuViewController.m中实现委托方法:
-(void)finishedDoingMyThing:(NSString *)labelString {
[self dismissModalViewControllerAnimated:YES];
self.pointsLabel.text = labelString;
}
然后确保在呈现模式VC之前将自己设置为LevelViewController的委托:
lvc.delegate = self; // Or whatever you have called your instance of LevelViewController
最后,当你在LevelViewController中完成了你需要做的事情之后,请调用它:
[_delegate finishedDoingMyThing:@"MyStringToPassBack"];
如果这没有意义,我和我可以试着帮助你理解。
答案 1 :(得分:0)
创建一个指向UILabel的属性self.pointsLabel
,然后您可以调用类似[self.pointsLabel setText:[NSString stringWithFormat:@"Points: %i", self.playerPoints]];
的内容来使用新分数更新标签
答案 2 :(得分:0)
在模态视图头文件中,添加属性:
{{1}}
然后在主视图控制器中,使用didViewAppear,例如:
{{1}}
其中“modalView”是您可能在那里分配/初始化的UIViewController的名称。
如果您想传递更多信息,请添加更多属性,例如用户选择的级别。