一些代码在从另一个视图控制器调用的方法不执行(Some code not executing in

2019-10-19 18:45发布

我的问题
我有一个标准UIViewController 。 一个按钮的按压时,它加载一个形式片模态视图控制器。 当解雇了的按下此模式视图UIBarButtonItem我做调用一个方法:

ViewController *main = [[ViewController alloc] initWithNibName:nil bundle:nil];
[main updateLabel];

在方法-(void)updateLabelViewController我设置一个标签的文本,但标签不会改变。 但我知道该函数被调用,因为如果我做NSLog(@"Method call test);而不是label.text = @"Test"我可以在控制台中看到该消息。

我究竟做错了什么? 它必须是我打电话的主要方法方式ViewController ,因为我可以很容易地改变标签其他地方。

我想做的事:
当解雇模态视图控制器,我想在主视图控制器被称为一种方法,在这种情况下更改标签的文本。

谢谢你的帮助!

Answer 1:

您正在创建视图控制器的新实例代码,没有得到一个指向你已经有了一个。

如果视图控制器是提出了模态视图控制器,那么你就可以得到一个指向与它,

ViewController *main = self.presentingViewController;


Answer 2:

一个更好的办法来做到这一点是使用委托模式。

https://developer.apple.com/library/ios/documentation/general/conceptual/DevPedia-CocoaCore/Delegation.html

下面是一个设计图案建议

模态视图控制器不应该知道如何辞退本身,即呈现视图控制器的责任。 毕竟,它可能已经在许多不同的方式(模态,酥料饼,推导航)提出。 使用委托模式,模态视图控制器会告诉其委托的是,当栏按钮项目被按下时应予驳回。 然后委托,这是呈现视图控制器,将关闭该模式的查看和更新​​在你的问题中提到的标签。



文章来源: Some code not executing in a method called from another ViewController