从视图控制器调用app delegate方法

时间:2015-06-08 09:12:54

标签: ios swift appdelegate

我想知道我是否可以从另一个ViewController调用app delegate方法。

当应用启动时,会调用application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool i方法。我可以第二次从另一个视图控制器调用此方法吗?

5 个答案:

答案 0 :(得分:37)

不确定为什么要这样做。你可能不应该,但为了回答这里的问题,它是:

public Handler(Method method, Object instance, EventHandle handle) throws Throwable {
    this.method = method;

    log.info(method.getGenericReturnType() + "");

    for(Type type : method.getParameterTypes()) {
        log.info(type.getTypeName());
    }

    this.handle = handle;
    this.lookup = MethodHandles.lookup();
    this.methodHandle = lookup.unreflect(method);
    MethodType type = methodHandle.type();
    // add the type of the instance to the factory method
    MethodType factoryType=MethodType.methodType(EventHandler.class,type.parameterType(0));
    // and remove it from the function signature
    type=type.dropParameterTypes(0, 1);

    log.info("" + type.toMethodDescriptorString());

    this.invoker = (EventHandler)LambdaMetafactory.metafactory(lookup,
        "handle", factoryType, type, methodHandle, type).getTarget()
    // use invoke instead of invokeExact as instance is declared as Object
        .invoke(instance);
}

答案 1 :(得分:22)

在Swift 3.0中,您可以调用:

let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.anyAppDelegateInstaceMethod()

答案 2 :(得分:7)

此应用程序启动时只调用一次此方法。你不能从ViewController。而是在AppDelegete中创建用户定义的方法。并从ViewController调用该方法。通过获取AppDelegate的对象。

AppDelegate *appDel = (AppDelegate *)[UIApplication sharedApplication].delegate;
[appDel <Your method>];

答案 3 :(得分:1)

构造

在代码末尾的AppDelegate Class中添加构造函数

Swift 3.x

 class func shared() -> AppDelegate
{
    return UIApplication.shared.delegate as! AppDelegate
}

Swift 2.x

func appDelegate () -> AppDelegate
{
return UIApplication.sharedApplication().delegate as! AppDelegate
}

并添加像这样的

var boolForFun = Bool()

如何在班上使用参考?

方法

快速3倍 访问功能或变量

AppDelegate.shared().boolForFun = true

for else

appDelegate().methodFoo()

可变

appDelegate().foo

答案 4 :(得分:1)

斯威夫特 4、斯威夫特 5

正如其他人所说,您不应该这样做。 如果您在某个应用程序生命周期中触发它并使用通知中心做一些特定的事情,那就更好了。

示例(在 ViewController 中):

NotificationCenter.default.addObserver(
    self,
    selector: #selector(applicationWillEnterForeground),
    name: UIApplication.willEnterForegroundNotification,
    object: nil
)

但是,如果您确实必须调用应用程序委托方法,则可以使用此

let appDelegate: AppDelegate? = UIApplication.shared.delegate as? AppDelegate