【问题标题】:Some code not executing in a method called from another ViewController某些代码未在从另一个 ViewController 调用的方法中执行
【发布时间】:2014-04-03 22:04:28
【问题描述】:

我的问题
我有一个标准的UIViewController。按下一个按钮,它就会加载一个表单模式视图控制器。当按下 UIBarButtonItem 关闭这个模态视图时,我调用一个方法:

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

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

我做错了什么?这一定是我在主ViewController中调用方法的方式,因为我可以在其他任何地方轻松更改标签。

我想做的事:
关闭模态视图控制器时,我希望在主视图控制器中调用一个方法,在这种情况下更改标签的文本。

感谢您的帮助!

【问题讨论】:

    标签: ios iphone objective-c uiviewcontroller label


    【解决方案1】:

    您正在使用该代码创建一个新的 ViewController 实例,而不是获得指向您已有的实例的指针。

    如果 ViewController 是呈现模态视图的控制器,那么您可以通过以下方式获取指向它的指针,

    ViewController *main = self.presentingViewController;
    

    【讨论】:

    • 这给出了一个警告:不兼容的指针类型用“UIViewController *”类型的表达式初始化“ViewController *”
    • @ifraaank,只需添加一个演员表,(ViewController *)self.presentingViewController
    【解决方案2】:

    更好的方法是使用委托模式。

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

    以下是设计模式建议

    模态视图控制器不应该知道如何关闭自己,这是呈现视图控制器的责任。毕竟,它可以以多种不同的方式呈现(模态、弹出框、推送导航)。使用委托模式,模态视图控制器会告诉它的委托,当条形按钮项目被按下时它应该被解除。然后,作为呈现视图控制器的委托将关闭模式视图并更新您问题中提到的标签。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      • 2018-04-27
      • 2016-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多