【问题标题】:how to call function from other VC?如何从其他 VC 调用函数?
【发布时间】:2015-06-01 11:07:45
【问题描述】:

我有一些变量,比如说isMenuVisible = false; 我想在这个变量改变时设置一些函数:

isMenuVisible: Bool!{
     didSet{
        callFunctionFromOtherViewController()
    }
}

这怎么可能?我是否需要创建 VC 实例才能访问该功能?或者我需要将该功能公开?

【问题讨论】:

  • 您想要调用该方法的类需要具有另一个类的实例或其他方式来访问它,例如通过 AppDelegate 并且可调用方法需要是公共的,但默认情况下它们是内部的,这意味着它们对同一应用程序域中的其他类是公共的。

标签: ios function swift call


【解决方案1】:

要从另一个 VC(或任何其他类)调用方法/函数,您有 2 个选择:

  1. 在另一个视图控制器中创建一个类方法:

在你的 MyViewController.h 中

+(void)myClassMethod;

无论你需要在哪里使用它

[MyViewController myClassMethod];
  1. 在另一个视图控制器中创建一个实例方法:

在你的 MyViewController.h 中

-(void)myClassMethod;

无论你需要在哪里使用它

MyViewController *myViewControllerInstance = [[MyViewController alloc] init];  
[myViewControllerInstance myClassMethod];

【讨论】:

    【解决方案2】:

    绝对不需要为 viewController 创建实例, 如果它是 rootViewController 你可以这样得到它:

    var appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    var vc = (appDelegate.window?.rootViewController as? MyViewController)!
    

    如果您的视图控制器是父级,则如下所示:

    var myViewfromParent = self.parentViewController as? MyViewController
    

    如果你使用带有 id 的故事板,你可以这样得到:

    let storyboard = UIStoryboard(name: "MyStoryboardName", bundle: nil)
    let vc = storyboard.instantiateViewControllerWithIdentifier("someViewController") as! UIViewController
    

    希望对你有帮助

    【讨论】:

      【解决方案3】:

      如果您使用 viewController 包含并且可以轻松引用视图控制器,您可以简单地在 .h 文件中创建一个公共方法并调用该方法...但是,对于 viewControllers,通常情况下 a .您没有/不希望对其他类中的 viewController 实例进行通用访问,b.当此方法更改时,viewController 甚至可能不存在。由于这些原因,我会在 viewControllers 中触发操作时使用 NSNotifications。

      NSNotificationCenter addObserver in Swift

      如果这是不可接受的,并且您可以保证该类将以架构合理的方式链接,我将创建一个委托。这样,您可以在创建 viewController 时设置委托,并且在尝试返回 viewController 时不会出现混乱......我只建议在 viewController 和包含该操作的类之间存在真正的连接时(在这种情况下是布尔)

      在目标 c 中你会这样做

      MyViewController *myViewController = [[MyViewController alloc] init];
      myViewController.delegate = theClassContainingTheBool; // could be self.. might not be... If you can't do this line of code, then you should use notifications
      

      迅速

      Delegates in swift?

      How to define optional methods in Swift protocol?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-20
        • 2013-01-12
        • 1970-01-01
        相关资源
        最近更新 更多