3

私のアプリでは、ナビゲーション コントローラーを使用しています。私の問題は、(生成されたナビゲーションの戻るボタンを使用して) 前のビューに移動すると、NSString データが転送されないことです。ナビゲーション コントローラーからスタックをナビゲートするときに、これらの NSString 値を保存する方法がわかりません。これらの NSString 値を電子メールで送信する必要があります。

これは、戻るボタンを押す前のビューコントローラーです

-(void)button{
    NSString *dd = @"text";
    viewcontroller.string = dd;
}

これは、戻るボタンを押した後の前のコントローラーです (View Controller)

.h

@property (strong,nonatomic) NSString *string;

.m

NSString *emailBody = [NSString stringWithFormat:@"%@  ", string];

また、私の状況に似たこの質問を見つけたので、それに基づいて質問をモデル化しました。popViewControllerAnimated の後、UITextField の内容が空です。

4

2 に答える 2

1

委任を使用する必要があります。以前の(概要)コントローラー(ナビゲートして戻るコントローラー)は、詳細ビューコントローラーが定義するプロトコルを実装する必要があります。以前のコントローラーは、表示する直前に詳細コントローラーのデリゲートとして自身を設定します。表示され、詳細から概要コントローラーに戻るナビゲーションが発生しようとしている場合、詳細コントローラーは、破棄される直前に概要コントローラーに通知できます (パラメーター オブジェクトとして文字列を含むメッセージを送信することもできます)。

于 2013-09-01T01:49:25.173 に答える
0

vikingosegundo に同意します。これを処理するには、委任が最善の方法です。この投稿を読むことをお勧めします:ここをクリック

抜け道はあるけど、

あなたの子View Controllerで:

- (void)viewDidLoad
{
    [super viewDidLoad];
    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"back"                                                                 style:UIBarButtonItemStyleBordered
                                                                  target:self
                                                                  action:@selector(goBack:)];

    self.navigationItem.leftBarButtonItem = backButton;
}

- (void) goBack:(id)sender
{
    NSArray *vcs = self.navigationController.viewControllers;
    id parentVC = [vcs objectAtIndex:[vcs count] - 2];
    if ([parentVC respondsToSelector:@selector(getStringFromChildVC:)])
        [parentVC getStringFromChildVC:@"text"];
    [self.navigationController popToRootViewControllerAnimated:YES];
}

親View Controller .hファイルで:

-(void)getStringFromChildVC:(NSString *)myString;

および .m ファイル

-(void)getStringFromChildVC:(NSString *)myString
{
    self.string = myString;
}

それだけです..しかし、それでも委任を学ぶことをお勧めします。

于 2013-09-01T05:42:10.447 に答える