我有一些变量可以说isMenuVisible = false;
我想在这个var改变时设置一些函数:
isMenuVisible: Bool!{
didSet{
callFunctionFromOtherViewController()
}
}
怎么可能?我是否需要创建VC实例才能访问该功能?或者我需要公开这个功能?
答案 0 :(得分:0)
要从另一个VC(或任何其他类)调用方法/函数,您有两个选择:
在MyViewController.h中
+(void)myClassMethod;
无论您何时需要使用它
[MyViewController myClassMethod];
在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中