目前,我的应用程序从视图A到视图B通过segue并在prepareForSegue中执行一些功能。如果我想调用视图B进入视图A时执行的功能(按导航控制器上的后退按钮后),我该怎么办?
我想我可以将“后退按钮”映射到IBAction,但我不知道如何做到这一点,因为后退按钮是导航控制器的一部分,并且在故事板上不能直接显示。
特别是,视图B更新了视图A显示的一些值。我想调用viewDidLoad,以便视图A在加载之前具有更新的数据。
在ViewA的视图控制器中:
// update view when it becomes visible
- (void)viewDidAppear:(BOOL)animated {
[self viewDidLoad];
}
答案 0 :(得分:2)
如果要在视图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];
}
}