fel*_*iao 4 xcode uiviewcontroller uilabel modalviewcontroller ios
我目前正在为我的第一款iPhone游戏设计结构并遇到问题.目前,我有一个'MenuViewController',它允许你选择要播放的关卡和一个'LevelViewController'来播放关卡.
UIButton'MenuViewController'上的A 触发了'LevelViewController'的模态segue.
UIButton'LevelViewController'上的A 触发以下方法返回'MenuViewController':
-(IBAction)back:(id)sender //complete
{
[self dismissModalViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)
问题是,我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
}
Run Code Online (Sandbox Code Playgroud)
self.playerPoints是MenuViewController的整数属性
有没有办法可以更新标签?提前谢谢!
这是授权的完美案例.当LevelViewController完成后,它需要触发一个在MenuViewController中处理的委托方法.这个委托方法应该关闭模态VC,然后做你需要做的其他事情.呈现VC通常应该解除它所呈现的模态视图.
以下是如何实现此目的的基本示例:
LevelViewController.h(接口声明之上):
@protocol LevelViewControllerDelegate
-(void)finishedDoingMyThing:(NSString *)labelString;
@end
Run Code Online (Sandbox Code Playgroud)
ivar部分内的相同文件:
__unsafe_unretained id <LevelViewControllerDelegate> _delegate;
Run Code Online (Sandbox Code Playgroud)
ivar部分下面的相同文件:
@property (nonatomic, assign) id <LevelViewControllerDelegate> delegate;
Run Code Online (Sandbox Code Playgroud)
在LevelViewController.m文件中:
@synthesize delegate = _delegate;
Run Code Online (Sandbox Code Playgroud)
现在在MenuViewController.h中,#import "LevelViewController.h"并将自己声明为LevelViewControllerDelegate的委托:
@interface MenuViewController : UIViewController <LevelViewControllerDelegate>
Run Code Online (Sandbox Code Playgroud)
现在在MenuViewController.m中实现委托方法:
-(void)finishedDoingMyThing:(NSString *)labelString {
[self dismissModalViewControllerAnimated:YES];
self.pointsLabel.text = labelString;
}
Run Code Online (Sandbox Code Playgroud)
然后确保在呈现模式VC之前将自己设置为LevelViewController的委托:
lvc.delegate = self; // Or whatever you have called your instance of LevelViewController
Run Code Online (Sandbox Code Playgroud)
最后,当你完成LevelViewController中你需要做的事情时,只需调用:
[_delegate finishedDoingMyThing:@"MyStringToPassBack"];
Run Code Online (Sandbox Code Playgroud)
如果这没有意义,我和我可以试着帮助你理解.
小智 0
创建一个self.pointsLabel指向 UILabel 的属性,然后您可以调用类似的方法[self.pointsLabel setText:[NSString stringWithFormat:@"Points: %i", self.playerPoints]];来使用新分数更新标签
| 归档时间: |
|
| 查看次数: |
5227 次 |
| 最近记录: |