0

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

//成人票计算器.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 =@"";
4

1 回答 1

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]];

另一种可能性是让学生控制器成为成人控制器的代表,并让成人控制器向其代表询问其值totalLabel以及x何时需要它们。

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

于 2013-03-29T02:18:55.063 回答