1

つまり、2 つのシーンがあります...最初のシーンには 2 つの入力テキスト フィールドがあります。次のシーンに進む前に、最初のフィールドに情報を入力します。次のシーンでは、最初のシーンで使用して 2 番目のテキスト フィールドに入力する必要がある情報が生成されます。最初のシーンに戻るたびに、最初の一連の情報がクリアされます。単純に戻るボタンを使用することはできません。prepareforsegue を使用する必要があるため、シーン 1 にテキスト情報を入力し、シーン 2 にセグエして (他の情報を生成)、シーン 1 にセグエバックする方法があれば、以前の情報を失うことはありません。入った?

これで十分な情報だと思います。前もって感謝します。

編集済み

これが私のコードの一部です。

inputMilesViewController.h (最初のビュー)

@property  (weak, nonatomic)IBOutlet UIButton *myTodayButton;

(myTodayButton は dvc にセグエ - セグエ前 myTodayButton.titleLabel.text は "TODAY" に等しい)

dvc.m (セカンド ビュー)

- (IBAction)myNewSelectDate:(id)sender {

 inputMilesViewController *classInstance = [[inputMilesViewController alloc] init];

[classInstance changeButtonText:[_myNewDatePicker date]];

[self dismissViewControllerAnimated:YES completion:nil];

 }

inputMilesViewController.m (最初のビュー)

-(void) changeButtonText:(NSDate*) dateForInput{
NSLog(@"The button is titled %@", self.myTodayButton.titleLabel.text);

NSDate *now = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"EEE, MMM d,''yy"];

NSString *formattedDateString = [formatter stringFromDate:dateForInput];

... ... (ここで、ボタンのテキストをformattedDateStringとして読み取るように変更しようとしていますが、NSLogはボタンのテキストが現在(null)であることを示しています)。

4

2 に答える 2

1

私はペドロスに同意します。あなたはこれを間違っているようです。セグエを使用して vc1 から vc2 に移動し、別のセグエを使用して vc2 から vc1 に移動している可能性がありますが、これは誤りです。本当のセグエが新しいView Controllerインスタンスを作成するので、それは間違っています. したがって、以前に残した同じ vc1 に戻ることはありません。代わりに、完全に新しい vc1 を作成し、それに進みます! そのため、フィールドは空です。これはまったく新しいクリーン ビュー コントローラーです。

代わりに、真のセグエアウトを実行し、「終了」(または「巻き戻し」) セグエが戻ってくるようにする必要があります。これは iOS 6 の新機能です。ここにいくつかの例があります:

https://github.com/mattneub/Programming-iOS-Book-Examples

特に、名前が「ch19p560」と「ch19p561」で始まる 4 つの例を見てください。これらは、セグエとして vc1 から vc2 に情報を渡す方法と、アンワインド バックするときに vc2 から同じ vc1 インスタンスに情報を戻す方法を示しています。また、さまざまな程度の巻き戻し (たとえば、いくつかのビュー コントローラーを元に戻す) と、さまざまな状況を示しています。

于 2012-11-09T05:43:50.283 に答える
1

新しい編集

の上部にインポートを追加しますinputMilesViewController.m

// At the top with the other #imports
#import "dvc.h"

また、iOS に入る前にオブジェクト指向を学ぶことをお勧めします。その重要な部分です。難しいことではありませんが、間違いなく不可欠です。

このコードをプロジェクトに追加します。さらにinputMilesViewController.m_

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    [segue.destinationViewController setClassInstance];    
}

これdvc.hを追加します:

@property (weak, nonatomic) inputMilesViewController *classInstance;

これdvc.mを追加します:

@synthesize classInstance = _classInstance;

- (IBAction)myNewSelectDate:(id)sender {

    // Removed this line
    //inputMilesViewController *classInstance = [[inputMilesViewController alloc] init];

    [self.classInstance changeButtonText:[self.myNewDatePicker date]];

    [self dismissViewControllerAnimated:YES completion:nil];

 }

コメントで述べたように、このコードが行うことは、作成したばかりの新しいものではなく、元の fisrtViewController に文字列を渡すことです。これを実現するには、プロパティを作成し、classInstanceそれを元の viewController への参照にします。

簡単なヒント: クラス名を大文字で始めて、変数と区別できるようにします。したがって、この場合:InputMilesViewControllerDvc.

また、あなたはオブジェクト指向プログラミングにあまり慣れていないようです。そのことと MVC モデルについてもっと学んでみることをお勧めします。どちらも iOS のプログラミングの重要な部分です。

それでもうまくいかない場合は教えてください。

それが役に立てば幸い。

于 2012-11-08T02:52:42.770 に答える