1

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

第一视图控制器.h

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

第一视图控制器.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

第二视图控制器.m

@implementation SecondViewController
@synthesize numberLabel;

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

4 回答 4

3

在全球范围内存储价值的最佳简便方法

用你的关键字设置你的对象

[[NSUserDefaults standardUserDefaults] setObject:@"Ajay" forKey:@"name"]; 

而不是在您项目的任何地方获取该对象

NSString *name = [[NSUserDefaults standardUserDefaults] objectForKey:@"name"];
于 2012-04-10T04:52:10.470 回答
0

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

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

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

于 2012-04-10T00:00:09.430 回答
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; 
}
于 2012-04-10T00:11:19.990 回答
0

嗯...注意不要混淆视图和视图控制器!!!

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

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

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

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

  1. 创建一个 ivar。
  2. 使用单例。
  3. 将您的数据保存在 NSUserDefault 中。
  4. 在磁盘上创建数据库。

如果您需要在应用程序运行时管理数据,则第一种和第二种情况都很好。第三和第四,如果您想记住数据以供将来使用并在下次启动时检索它们。

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

于 2012-04-10T00:29:19.633 回答