Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UIApplicationLegate,但对于每个ViewController_Ios_Objective C_Swift - Fatal编程技术网

Ios UIApplicationLegate,但对于每个ViewController

Ios UIApplicationLegate,但对于每个ViewController,ios,objective-c,swift,Ios,Objective C,Swift,我想在显示新的视图控制器时得到通知,UIApplicationLegate提供了这样一种方式,但它只针对整个应用程序,而不是每个视图控制器 是否每次出现新的视图控制器时都会调用任何委托 注 我完全了解UIViewController内部的功能,但我想问的是一个与视图控制器本身分离的委托,类似于ApplicationLegate 我的尝试 我搜索了很多,我想到的唯一解决方案是扩展ViewController,然后让我的视图控制器继承这个新的视图控制器,但我真的更希望有一种方法可以捕获该事件而不更改

我想在显示新的视图控制器时得到通知,UIApplicationLegate提供了这样一种方式,但它只针对整个应用程序,而不是每个视图控制器

是否每次出现新的视图控制器时都会调用任何委托

注 我完全了解UIViewController内部的功能,但我想问的是一个与视图控制器本身分离的委托,类似于ApplicationLegate

我的尝试 我搜索了很多,我想到的唯一解决方案是扩展ViewController,然后让我的视图控制器继承这个新的视图控制器,但我真的更希望有一种方法可以捕获该事件而不更改视图控制器中的任何内容

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated;
UINavigationControllerDelegate
中的方法

Swift版本:

func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool)

您可以将您的
uiapplicationelegate
设置为
UINavigationController
的代理,并在那里获取所有事件。

创建代理协议,将应用程序代理设置为此协议代理的代理,然后在视图中查看控制器功能(
viewDidLoad
ViewDidDisplay
等)调用您的代理函数。

不,在应用程序中显示给定的视图控制器时,没有获取通知或代理回调的通用解决方案


如前所述,仅使用
UINavigationController

时,您可能会得到部分解决方案,谢谢!但您的解决方案需要在每个视图控制器中进行额外的工作谢谢!您的解决方案会很好地工作,但我必须创建我的自定义视图UINavigationController@WilliamKinaan不一定。基本上,你的代码>viewController保存在
navigationController
的堆栈中。您可以通过
self.navigationController
从每个堆栈中访问它。如果将
AppDelegate
传递给第一个
viewController
,则可以将其指定为
navigationController
的代理(
self.navigationController?.delegate=appDelegate
)。您不必拥有
navigationController
,就可以这样使用它。您所说的非常有趣,事实上,从AppDelegate中,我可以捕获第一个视图控制器,请求它的navigationController,然后分配导航控制器的委托。但是,有两件事:首先,如果第一个视图控制器视图控制器没有任何导航控制器?那么这个
self.navigationController?.delegate将无效。第二,如果您有许多导航控制器(选项卡视图控制器中的每个选项卡都有自己的导航控制器),该怎么办@WilliamKinaan在不了解应用程序的整个体系结构的情况下,很难准确地说出你需要做什么。我在前面的评论中所写的是实现你需要的东西的一般方法。我相信你会找到将所有代理集中到一个类中的方法。一个单例可能有用。同样,你有一个非常有效的观点问题是我自己没有一个特定的架构,我正在尝试构建一个可以与任何架构一起工作的解决方案。感谢您的时间和努力,我会接受答案