退出segue时如何调用函数?

时间:2012-11-12 15:31:49

标签: objective-c ios uistoryboardsegue

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

我想我可以将“后退按钮”映射到IBAction,但我不知道如何做到这一点,因为后退按钮是导航控制器的一部分,并且在故事板上不能直接显示。

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

在ViewA的视图控制器中:

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

2 个答案:

答案 0 :(得分:2)

啊,这不是一个塞格。这相当于popViewController。

如果要在视图A变为可见时更新视图,则可以在函数...

中执行此操作
- (void)viewWillAppear:(BOOL)animated

或在函数中

- (void)viewDidAppear:(BOOL)animated

每次视图变得可见时都会运行。

在这里,您可以运行“updateView”方法或任何您想要的方法。

如果要将数据传回视图A(即视图B是“选择城市”视图或其他内容),则显示make视图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。

答案 1 :(得分:1)

在视图控制器“A”中,你需要实现方法prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender并在里面创建一个segues 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];
  } 
}