0

現在、私のアプリはセグエを介してビューAからビューBに移動し、prepareForSegueでいくつかの機能を実行します。ビューBがビューAに移動したときに実行される関数を呼び出したい場合(ナビゲーションコントローラーの戻るボタンを押した後)はどうすればよいですか?

「戻るボタン」をIBActionにマップできると思いますが、戻るボタンはナビゲーションコントローラーの一部であり、ストーリーボードに直接表示されないため、どのようにマップするかはわかりません。

特に、ビューBは、ビューAが表示したいくつかの値を更新します。ビューAがロードされる前に更新されたデータを持つように、viewDidLoadを呼び出したいと思います。

ViewAのViewControllerの場合:

// update view when it becomes visible
- (void)viewDidAppear:(BOOL)animated {
    [self viewDidLoad];
}
4

2 に答える 2

2

ああ、これはそれ自体がセグエではありません。これはpopViewControllerと同等です。

ビューAが表示されたときにビューを更新する場合は、関数で更新できます...

- (void)viewWillAppear:(BOOL)animated

または関数内

- (void)viewDidAppear:(BOOL)animated

これらは、ビューが表示されるたびに実行されます。

ここでは、「updateView」メソッドまたは任意のメソッドを実行できます。

データをビューAに戻したい場合(つまり、ビューBは「都市の選択」ビューなど)、ビューAをビューBの代理人として表示します。これにより、ユーザーが何かをしたときに情報を返すことができます。

viewDidLoadを実行する代わりに、これを実行します...

- (void)viewDidLoad
{
    [self.button setTitle:@"blah"];

    [self updateView];
}

- (void)viewDidAppear:(BOOL)animated
{
    [self updateView];
}

- (void)updateView
{
    // do something that you want to happen
}

ただし、実際にこれを行う必要はありません。viewDidAppearから[selfupdateView]を実行するだけで十分です。

ただし、viewDidLoadを直接実行することはできません。

于 2012-11-12T15:35:00.770 に答える
1

ビューコントローラー「A」では、メソッドを実装しprepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender、内部でセグエのdestinationViewcontrollerを作成する必要があります。例を次に示します。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
  if ([[segue identifier] isEqualToString:SEGUE_FOR_OPTIONS])
  {
     // Get reference to the destination view controller
      OptionsViewController *optionVC = [segue destinationViewController];
     [optionVC someMethod];
  } 
}
于 2012-11-12T16:18:22.747 に答える