如何将变量传递给下一个视图?

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 #import "Fråga.h" 界面 Ra_ttning : UIView IBOutlet UILabel *rattningen; NSNumber *antratt; 属性(非原子,保留) IBOutlet UILabel *rattningen;属性(非原子,强) NSNumber *antratt;我也在 Ra_ttning.m 中合成了 antratt。我收到一条错误消息,提示“属性 'antratt' 不是 在“Ra_ttning”类型的对象上找到” 除了你写的东西之外,我还需要导入一些东西或做任何事情吗? 在 Frag_ga.m 中导入 Ra_ttning.h classname -> "Ra_ttning".antratt,你不能访问没有对象的类,你必须先分配并初始化它。 Ra_ttning *rattning = [[Ra_ttning alloc] initWithNibName:@"Ra_ttning" bundle:nil];然后用 rattning.antratt 传递值【参考方案2】:

方法一:

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 列表传递给下一个视图,然后重定向

如何将此第 1 天作为 uilabel 传递给下一个视图控制器,我想在下一页打印第 1 天

将js变量传递给django视图[重复]

将触摸传递给下的视图

Android:将listView项目位置传递给下一个活动

Django:将会话信息传递给下一个模板和视图