我要做的是点击一个按钮(在代码中创建的),并让它调用一个不同的视图控制器,然后让它在新的视图控制器中运行一个函数。

我知道这在IB中相对容易完成,但这不是一个选择。

我想做的一个例子是,如果你有两个视图控制器一个带有房子的启动画面。另一个视图控制器有一个房子的遍历你可以按照设定的顺序遍历所有的房间。在启动画面中,每个房间都有按钮,玩家可以在游戏中跳跃到任意地点。


当前回答

即使技术上可行,也不是一个好方法。 当你说:“启动画面将为每个房间设置按钮,让你可以在穿越过程中跳转到任何点。” 你想通过appdelegate通过按钮上的tohc事件调用这些控制器?

这种方法并不符合苹果的指导方针,而且有很多缺点。

其他回答

如果你需要从watchOS上的视图控制器访问你的WatchKit扩展委托:

extDelegate = WKExtension.sharedExtension().delegate as WKExtensionDelegate?

你可以像这样访问委托:

MainClass *appDelegate = (MainClass *)[[UIApplication sharedApplication] delegate];

用应用程序类的名称替换MainClass。

然后,如果你有另一个视图控制器的属性,你可以调用这样的东西:

[appDelegate.viewController someMethod];

我就是这么做的。

[[[UIApplication sharedApplication] delegate] performSelector:@selector(nameofMethod)];

不要忘记导入。

#import "AppDelegate.h"

如果有人需要同样的Xamarin (Xamarin。ios / Monotouch),这对我来说很有效:

var myDelegate = UIApplication.SharedApplication.Delegate as AppDelegate;

(需要使用UIKit;)

Swift 3.0及更高版本更新

//
// Step 1:- Create a method in AppDelegate.swift
//
func someMethodInAppDelegate() {

    print("someMethodInAppDelegate called")
}

下面从控制器调用上述方法

//
// Step 2:- Getting a reference to the AppDelegate & calling the require method...
//
if let appDelegate = UIApplication.shared.delegate as? AppDelegate {

    appDelegate.someMethodInAppDelegate()
}

输出: