【问题标题】:How to pass a variable to the next view?如何将变量传递给下一个视图?
【发布时间】:2012-04-21 10:40:17
【问题描述】:

我的应用有一个名为int antalratt 的变量,它是该视图中正确答案的数量。现在我想将该变量传递给下一个视图,我想在其中获得要显示的正确答案的数量!我知道如何为标签文本获取整数!

int antalratt 写在firstviewcontroller.m 中,我如何使它“全局”以便我可以在secondviewcontroller 中使用它?

提前致谢!

【问题讨论】:

  • 你用的是导航控制器,标签栏控制器吗?
  • 抱歉,我是编程新手,所以我可能会回答一些错误的问题等等;)首先我有一个标签栏控制器,在第一个视图中,您可以按一个按钮来选择一个特定的测试,然后你被重定向到一个新的视图控制器,在那里你得到问题,当你点击一个在所有问题后显示的按钮时,应用程序将计算正确答案的数量并将你发送到一个新的视图控制器,其中我希望显示正确答案的数量!
  • 不要创建全局变量,句号。也不要试图利用应用程序委托来保存您的模型数据。即使这两种方式都可以发挥作用,但你以后会后悔的。而是将值/对象从一个视图控制器传递到另一个视图控制器,以使数据流立即对任何其他编码器透明。

标签: iphone objective-c view global-variables


【解决方案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!我认为我正在使用标签栏模板!如果这就是你的意思!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 2019-11-18
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多