从一个视图访问另一个视图中的变量值

时间:2012-04-09 23:43:16

标签: iphone objective-c xcode ipad uiviewcontroller

我在理解变量值从一个视图传递到另一个视图时遇到了一些麻烦。我在第一个视图中有一个UITextField,用户输入一个数字。当用户点击按钮时,该数字乘以2,结果显示在第二个视图中的UILabel上。这就是我迄今为止的目标

FirstViewController.h

@interface FirstViewController : UIViewController{
UITextField *numberTextField;
NSNumber *aNumber;
}
@property (nonatomic, retain) IBOutlet UITextField *numberTextField;
@property (nonatomic) NSNumber *aNumber;
-(IBAction)calculate;
@end

FirstViewController.m

@implementation FirstViewController
@synthesize numberTextField,  aNumber;

-(double)doubleNumber{
double number = [numberTextField.text doubleValue] * 2;
return number;
}

-(IBAction)calculate{
self.aNumber = [NSNumber numberWithDouble:[self doubleNumber]];   
}

//more default code continues below

SecondViewController.h

#import "FirstViewController.h"

@interface SecondViewController : FirstViewController{
UILabel *numberLabel;
}
@property (nonatomic, retain) IBOutlet UILabel *numberLabel;
@end

SecondViewController.m

@implementation SecondViewController
@synthesize numberLabel;

- (void)viewDidLoad
{
[super viewDidLoad];
numberLabel.text = [NSString stringWithFormat:@"%@",aNumber];
}

4 个答案:

答案 0 :(得分:3)

全球存储价值的最佳和最简单方法

使用关键字

设置对象
[[NSUserDefaults standardUserDefaults] setObject:@"Ajay" forKey:@"name"]; 

比在项目中的任何地方获取该对象

NSString *name = [[NSUserDefaults standardUserDefaults] objectForKey:@"name"];

答案 1 :(得分:0)

你应该使用segue完成你想要的。在故事板中创建一个segue,然后在- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender的firstviewcontroller中调用它。然后传递数据,导入secondviewcontroller.h文件,其中包含要传递的值的属性并设置- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

在该方法中,您可以使用[segue.destinationViewController ###call the setter for the property in your secondViewController.h file###];

传递内容

如果不清楚,或者您需要更多帮助,请告诉我。

答案 2 :(得分:0)

我假设FirstViewController正在实例化SecondViewController。如果是这样,那么您只需使用附加属性将aNumber传递给SecondViewController:

// add an additional property to the SecondViewController
@property (nonatomic, retain) NSNumber *aNumber;

在FirstViewController中实例化SecondViewController时,只需在加载它之前将该值传递给SecondViewController:

// inside FirstViewController 
SecondViewController *secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
secondViewController.aNumber = aNumber;

// inside SecondViewController
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    numberLabel.text = self.aNumber; 
}

答案 3 :(得分:0)

嗯......注意不要混淆视图和viewControllers !!!

viewController可以管理多个视图。例如,在您的代码中,您有一个UITextField,一个UILabel,可能还有一个UIButton。这些是由两个viewsController(FirstViewController和SecondViewController)管理的所有视图。

只要您使用的视图很少,就可以只使用一个viewController并将您想要的值直接传递给UILabel:

- (void)calculateAndPassValue
{
    aNumber = [NSNumber numberWithDouble:[self doubleNumber]];
    numberLabel.text = [NSString stringWithFormat:@"%@",aNumber];
}

否则,如果您的目标是将变量值从一个viewController传递到另一个viewController。嗯...有很多方法可以获得它,例如:

  1. 创建一个ivar。
  2. 使用单身人士。
  3. 在NSUserDefault中保存数据。
  4. 在磁盘上创建数据库。
  5. 如果您需要在应用运行时管理数据,则第一种情况和第二种情况都很好。第三和第四,如果你想记住你的数据以备将来使用,并在下次启动时检索它们。

    尝试搜索ivar,singleton,NSUserDefault等密钥,您会发现许多讨论和示例代码行。