如何将变量传递给下一个视图?
Posted
技术标签:
【中文标题】如何将变量传递给下一个视图?【英文标题】:How to pass a variable to the next view? 【发布时间】:2012-04-21 10:40:17 【问题描述】:我的应用有一个名为int antalratt
的变量,它是该视图中正确答案的数量。现在我想将该变量传递给下一个视图,我想在其中获得要显示的正确答案的数量!我知道如何为标签文本获取整数!
int antalratt
写在firstviewcontroller.m
中,我如何使它“全局”以便我可以在secondviewcontroller
中使用它?
提前致谢!
【问题讨论】:
你用的是导航控制器,标签栏控制器吗? 抱歉,我是编程新手,所以我可能会回答一些错误的问题等等;)首先我有一个标签栏控制器,在第一个视图中,您可以按一个按钮来选择一个特定的测试,然后你被重定向到一个新的视图控制器,在那里你得到问题,当你点击一个在所有问题后显示的按钮时,应用程序将计算正确答案的数量并将你发送到一个新的视图控制器,其中我希望显示正确答案的数量! 不要创建全局变量,句号。也不要试图利用应用程序委托来保存您的模型数据。即使这两种方式都可以发挥作用,但你以后会后悔的。而是将值/对象从一个视图控制器传递到另一个视图控制器,以使数据流立即对任何其他编码器透明。 【参考方案1】:在 secondviewcontroller.h 的公共接口中创建一个变量
@property (nonatomic, strong) NSNumber *correctAnswers;
在.m中合成,然后在firstviewcontroller中用secondviewcontroller.correctAnswers = [NSNumber numberWithInt:antalratt];
传递antalratt的值
到 secondviewcontroller。然后设置标签文本
【讨论】:
我写了 Ra_ttning.antratt=[NSNumber numberWithInt:antalratt]; (Ra_ttning 是第二个视图控制器,ant antratt 是你所谓的正确答案)在 Fra_ga.m(这是第一个视图控制器)中我也在 Ra_ttning.h 中写了这个:#import方法一:
RootViewController
-(IBAction)nextPage
int antalratt = 12; // Value to be transfered
FirstViewController * fvc = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
fvc.answer = antalratt;
[self presentModalViewController:fvc animated:YES];
[fvc release];
FirstViewController
@interface FirstViewController : UIViewController
int answer;
@property(nonatomic,assign) int answer;
@implementation FirstViewController
@synthesize answer;
- (void)viewDidLoad
[super viewDidLoad];
NSLog(@"%d",answer); // //displays answer on log
@end
方法二(AppDelegate)
AppDelegate
@interface AppDelegate : UIResponder <UIApplicationDelegate>
int antalratt;
@property(nonatomic ,assign) int antalratt;
RootViewController
-(IBAction)nextPage
int antalratt = 12; // Value to be transfered
AppDelegate * delegate = [[UIApplication sharedApplication] delegate];
delegate.antalratt = antalratt;
FirstViewController * fvc = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
[self presentModalViewController:fvc animated:YES];
[fvc release];
FirstViewController
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
AppDelegate * delegate = [[UIApplication sharedApplication] delegate];
NSLog(@"%d",delegate.antalratt); //displays answer on log
方法 3 (NSUserDefaults)
RootViewController
-(IBAction)nextPage
int antalratt = 12; // Value to be transfered
[[NSUserDefaults standardUserDefaults] setInteger:antalratt forKey:@"answer"];
FirstViewController * fvc = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
[self presentModalViewController:fvc animated:YES];
[fvc release];
FirstViewController
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
int ans = [[[NSUserDefaults standardUserDefaults] objectForKey:@"answer"] intValue];
NSLog(@"%d",ans); //displays answer on log
【讨论】:
【参考方案3】:filename *detailViewController = [[filename alloc] initWithNibName:@"filename" bundle:nil];
detailViewController.audio=@"yourData";
[self presentModalViewController:detailViewController animated:YES];
[detailViewController release];
在文件名.h 中声明
NSString *audio;
@property(nonatomic,retain) NSString *audio;
和文件名.m
@synthesize audio;
-(void) ViewDidLoad
NSLog(@"Audio = %@",audio); // if ur variable is integer declare %d in nslog.
就是这样
【讨论】:
文件名应该是什么?第一个或第二个视图的名称? filename.h 是您传递的类名,即第二个视图名称 我应该把第一行代码放在哪里?我应该更改“detailViewController 吗? 在你的第一堂课中,当你导航到下一堂课时 如何在下一个视图中获取变量?【参考方案4】:// view1.h
@interface view1 : UIView
NSString *passingVariable;
@property (nonatomic, strong) NSString *passingVariable;
@end
//
view1.m
@synthsize passingVariable;
@implementation view1
@end
//在另一个视图中
view2.m
#import "view1.h"
@implementation view2
-(IBAction)changeview
view1 *myview = [[view1 alloc]init];
myview.passingVariable = [NSString stringWithString:@"Hello Variable"];
[self.navigationController pushViewController:myview animated:YES];
@end
【讨论】:
但是我在View2.m中没有IBAction,View1中的按钮应该把我传给view2,直接显示答案!那我应该怎么做而不是这个 IBAction? 无论您试图导航到哪里,都忘记 IBAction,这是您必须做的。 :) 我必须制作一个 UIViewController 文件吗? :O 因为它现在是 UIView :O 你改了吗?以及您使用的模板 不,我没有改变它!从一开始就是 UIView!我认为我正在使用标签栏模板!如果这就是你的意思!以上是关于如何将变量传递给下一个视图?的主要内容,如果未能解决你的问题,请参考以下文章
Django:如何通过 AJAX 将 PKID 列表传递给下一个视图,然后重定向