我在Appdelegate中编写了一个函数。我想在ViewcontrollerA,ViewcontrollerB中覆盖此函数。因为同一方法在ViewcontrollerA,ViewcontrollerB。
中具有不同的行为如何在Viewcontroller中调用此函数,我不明白。
更新
class NaviBarVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
func click_save() {
}
}
class ViewcontrollerA: NaviBarVC {
override func viewDidLoad() { super.viewDidLoad() }
override func click_save() { // Error
super.click_save()
}
}
答案 0 :(得分:0)
您无法覆盖在AppDelegate中声明的函数,但您可以使用declare全局变量访问在AppDelegate中添加的函数。
let appDelegate = UIApplication.shared.delegate as! AppDelegate
您可以通过
在任何viewController中的任何位置访问AppDelegate的属性appDelegate.yourFuncName...()
答案 1 :(得分:0)
您无法覆盖AppDelegate
方法。由于ViewController,heirarchy并没有将它的超类作为AppDelegate。它继承自UIViewController
。因此,如果要覆盖,则必须创建一个viewController类,并且可以通过继承
喜欢这个----
class BaseViewController : UIViewController{
func yourMethod(){
}
}
现在,覆盖此方法的类将是这样的
class YourController : BaseViewController{
override func yourMethod(){
super.yourMethod()
// write your code here
}
}
是的,如果您只是想访问AppDelegate的方法而不想覆盖它。你可以这样做。
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.yourMethod()
答案 2 :(得分:-1)
在AppDelegate.h中创建类方法
@interface
+(AppDelegate*)Getdelegate;
-(void)testfunction;
AppDelegate.m
+(AppDelegate*)Getdelegate
{
return (AppDelegate*)[UIApplication sharedApplication].delegate;
}
ViewControllerA中的
[[AppDelegate Getdelegate] testFunction];