我如何将值从一个ViewController传递到另一个ViewController,这是用户输入和'计算'

时间:2013-03-28 23:55:06

标签: ios xcode global-variables extern

我想将'TotalLabel'计算执行到另一个名为'AdultPayNowViewController'的ViewContoller上。我还想执行'x'值,这是一个用户在'AdultPayNowViewController'上输入数量的UITextField

// AdultTicketCalculator.h

@interface StudentTicketCalculatorViewController : UIViewController {

    IBOutlet UITextField *Quantity;
    IBOutlet UILabel *Pricelabel;
    IBOutlet UILabel *TotalLabel;
    IBOutlet UIButton *CheckoutButton;

}

-(IBAction)calculate;
-(IBAction)clear;

@end

\\AdultTicketCalculator.m

-(IBAction)calculate {

    float x = ([Quantity.text floatValue]);
    float c = x*15;

    TotalLabel.text = [[NSString alloc] initWithFormat:@"$%.2f", c];

}

-(IBAction)clear {

    Quantity.text =@"";
    Pricelabel.text =@"$15.00";
    TotalLabel.text =@"";

1 个答案:

答案 0 :(得分:0)

首先,这些值可能甚至不应该存在于控制器中。如果它们真的是值,那么它们应该是以通常的MVC方式在控制器之间共享或传递的模型的一部分。

但继续前进,实际上只有几种方法可以在控制器(或任何对象)之间传递值。最直接的是,您在AdultPayNowViewController中创建了一个名为-initWithTotalLabel:andXValue:的自定义初始值设定项,并在StudentTicketCalculatorViewController内创建了该控制器,如下所示:

[[AdultPayNowViewController alloc] initWithTotalLabel:totalLabel andXValue:x];

或者来自某些共享父母:

[[AdultPayNowViewController alloc] initWithTotalLabel:[studentController totalLabel] andXValue:[studientController x]];

同样,如果您不需要成人控制器初始化的那些值,您可以始终将它们设置为属性并直接设置它们:

adultController = [[AdultPayNowViewController alloc] init];
[adultController setTotalLabel:[childController TotalLabel]];
[adiltController setXValue:[childController x]];

另一种可能性是让学生控制器成为成人控制器的代表,并让成人控制器在需要时向其代表询问totalLabelx的值。

最后,您可以将学生控制器作为参数或用户数据传递给负责创建成人控制器的方法或通知,然后使用其属性设置或初始化具有所需值的成人控制器。我相信,这或多或少是经过批准的“故事板”做事方式,-prepareForSegue:sender:中的所有事情都会发生。