0

「TotalLabel」計算を「AdultPayNowViewController」として知られる別の ViewContoller で実行したいと考えています。また、ユーザーが「AdultPayNowViewController」に数量を入力する UITextField である「x」値も実行したいと考えています。

//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 =@"";
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]];

もう 1 つの可能性は、生徒のコントローラーを大人のコントローラーのデリゲートにし、大人のコントローラーがそのデリゲートに値totalLabelx必要なときにそれらを要求するようにすることです。

最後に、生徒のコントローラーをパラメーターまたはユーザー データとして、アダルト コントローラーの作成を担当するメソッドまたは通知に渡し、そのプロパティを使用して、アダルト コントローラーを目的の値で設定または初期化することができます。これは多かれ少なかれ承認された「ストーリーボード」のやり方だと私は信じています-prepareForSegue:sender:

于 2013-03-29T02:18:55.063 に答える