如何从其他VC调用函数?

时间:2015-06-01 11:07:46

标签: ios function swift call

我有一些变量可以说isMenuVisible = false;我想在这个var改变时设置一些函数:

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

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

3 个答案:

答案 0 :(得分:0)

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

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

    +(void)myClassMethod;
    

    无论您何时需要使用它

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

      -(void)myClassMethod;
      

      无论您何时需要使用它

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

答案 1 :(得分:0)

绝对不需要为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

希望有所帮助

答案 2 :(得分:0)

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

NSNotificationCenter addObserver in Swift

如果这是不可接受的,你可以保证这个类将以体系结构的方式链接,我会创建一个委托。这样你可以在创建viewController时设置委托,并且在尝试返回viewController时没有任何问题...如果viewController之间存在真正的连接,我们只建议这样做以及包含该操作的类(在本例中为bool)

在目标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

在swift中

Delegates in swift?

How to define optional methods in Swift protocol?