0

目前,我的应用程序通过 segue 从视图 A 转到视图 B,并在 prepareForSegue 中执行一些功能。如果我想调用视图 B 转到视图 A 时执行的函数(按下导航控制器上的后退按钮后),我该怎么办?

我想我可以将“后退按钮”映射到 IBAction,但我不确定我会怎么做,因为后退按钮是导航控制器的一部分,并且在情节提要上不直接可见。

特别是,视图 B 更新了视图 A 已显示的一些值。我想调用 viewDidLoad 以便视图 A 在加载之前拥有更新的数据。

在 ViewA 的视图控制器中:

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

2 回答 2

2

啊,这不是一个segue本身。这相当于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 运行 [self updateView] 就足够了。

不过,您不能直接运行 viewDidLoad 。

于 2012-11-12T15:35:00.770 回答
1

在视图控制器“A”中,您需要实现该方法prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender并在内部创建一个 seguesdestinationViewcontroller,下面是一个示例:

- (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 回答