2

現在、次のコードを使用して、同じViewController.hおよびViewController.mファイルを参照している3つのView Controller間でUITextFieldのテキストを渡そうとしています。Xcode:ストーリーボードのタブ付きアプリケーションデータの受け渡し

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"NameOfSegue"]) { 
     ViewController *ibcVC = segue destinationViewController; 
     ibcVC.myTextField = self.myTextField; 
    } 
} 

次の順序でリンクされた3つのビューコントローラがあります。ViewC1 => ViewC2 => ViewC3。

私のUITextFieldはViewC2にあります。

私はViewC3にプッシュし例えばViewC2、上のボタンをクリックし

は、それが ViewC3にうまくデータを渡します。しかし、私が現在 にいると言うと、と入力して、UITextViewに何かを入力して、次にXcodeが自動的にそこに置くナビゲーションの[戻る]ボタンをクリックすると、 ViewC1期待どおりの罰金。しかし、私が、 ViewC2を押すViewC1のボタンを押すと、私のUITextFieldに入力されたデータ/テキストが消去されたか、nullにリセットされます。

DATAはEX正しくプッシュされる:

だから基本的には、ここで視覚的にわずかなデジタルを使用して問題です。 WEナビゲーションEX ON BACKボタンを押すと

ViewC1 => ViewC2 => ViewC3

データが消去されます。

ViewC1 < = ViewC2

+0

どの方法でviewc1に戻るのですか? dismissmodalviewcontroller? – Pochi

+0

これを使用する必要はありません。タブ付きアプリケーションとリンクビューコントローラをPush Segueで使用すると、Xcodeはナビゲーションで戻るボタンを自動的に作成します。私はその部分にストーリーボードを使用しているので、すべてがIBで実行され、プッシュなどを扱うときにプログラミングは必要ありません。しかし、Xcodeがその部分で何をしているのか分かっていれば、 – John

答えて

2

一つの解決策は、シングルトンであなたの文字列を格納することです。

SharedStrings.h =

#import <Foundation/Foundation.h> 

@interface SharedStrings : NSObject{ 
    NSString *string; 
} 

+(SharedStrings *)sharedString; 
-(void)setString:(NSString *)newString; 
-(NSString *)getString; 

@end 

SharedStrings.m =

#import "SharedStrings.h" 

static SharedStrings *sharedString; 

@implementation SharedStrings 

-(id)init{ 

    self = [super init]; 
    string = [NSString new]; 
    return self; 
} 

+(SharedStrings *)sharedString{ 
    if (!sharedString) { 
     sharedString = [[SharedStrings alloc] init]; 
    } 
    return sharedString; 
} 

-(void)setString:(NSString *)newString{ 
    string = newString; 
} 
-(NSString *)getString{ 
    return string; 
} 

@end 
あなたは、すべてのあなたの意見がそうのように、取得し、必要に応じて文字列を設定している可能性があり

- (void)viewWillAppear:(BOOL)animated 
{ 
    [myTextField setText:[[SharedStrings sharedString] getString]]; 
    [super viewWillAppear:animated]; 
} 

-(void)textFieldDidEndEditing:(UITextField *)textField{ 

    if (textField == enterInfoTF) { 
     [[SharedStrings sharedString] setString:textField.text]; 
    } 
} 
+0

はすごく優れた答えです – Grymjack

関連する問題