我在理解变量值从一个视图传递到另一个视图时遇到了一些麻烦。我在第一个视图中有一个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];
}
答案 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。嗯...有很多方法可以获得它,例如:
如果您需要在应用运行时管理数据,则第一种情况和第二种情况都很好。第三和第四,如果你想记住你的数据以备将来使用,并在下次启动时检索它们。
尝试搜索ivar,singleton,NSUserDefault等密钥,您会发现许多讨论和示例代码行。