swift覆盖其他viewcontroller中的appdelegate方法

时间:2017-09-05 10:56:56

标签: ios swift

我在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()

    }

 }

3 个答案:

答案 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];