zoukankan      html  css  js  c++  java
  • 使用AppDelegate单例,解决子视图无法给父视图发送消息的问题

    关于单例模式,我会在实验过后再开一个博客重点讲单例的使用,这里只是介绍我在PhotoForBingyan的照片滤镜的项目中使用AppDelegate单例的情况。

    碰到的问题:

    由于这个项目是个多视图的项目,我使用了Controller作为父视图来管理各个子视图视图,然后出现了一个状况:当我在子视图进行操作的时候,我没有办法给父视图传递消息,也就没有办法控制当前视图的转换。

    解决办法:

    通过AppDelegate的单例获得父视图的实例,然后通过父视图的实例方法进行视图的转换。

    具体实现:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    {

        self.window = [[UIWindowalloc] initWithFrame:[[UIScreenmainScreen] bounds]];

        // Override point for customization after application launch.

        self.viewController = [[ViewControlleralloc] initWithNibName:@"ViewController"bundle:nil];

        self.window.rootViewController = self.viewController;

        [self.windowmakeKeyAndVisible];

        returnYES;

    }

    以上为AppDelegate中自带的函数,我使用的是ViewController作为根视图,ViewController的实例在AppDelegate中的属性为viewController或者window.rootViewController。上面的代码中都有定义,任意一个都能获取到VIewController的实例。

        AppDelegate * appDelegate = [[UIApplication sharedApplication] delegate];

    其实这里可以看到,AppDelegate并不是真正的单例,真正的单例是UIApplication,它的SharedApplication方法是一个正式的单例方法,能够返回UIApplication的单例。由于AppDelegate也是iOS中唯一存在的一个实例,所以在iOS的默认程序里面都把AppDelegate作为UIApplication的委托处理,只要得到了UIApplication的单例,就可以通过delegate方法轻松获得AppDelegate的实例

    [(ViewController *)appDelegate.viewControllergetbackView];

    接下来就可以通过ViewController的属性轻松获得ViewController的实例,也就能运行它的方法了。这里需要注意的一点是最好使用强制转换运算,这样系统才能识别VIewController的各个方法。

  • 相关阅读:
    五、敏捷开发框架 初识组件式开发
    winform 控制Text Box只能输入英文数字和退格键
    WPF 常用控件属性
    问题分析
    串口通讯学习
    解决MVC中Model上的特性在EF框架刷新时清空的问题
    论序列化与反序列化
    dynamics 365 安全角色及权限
    .NET Core 依赖注入框架 框图笔记
    C#基本类型的取值范围与 .NET框架类型的对应
  • 原文地址:https://www.cnblogs.com/wisejoker/p/3399852.html
Copyright © 2011-2022 走看看