首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从appDelegate推送UIViewController

如何从 appDelegate 推送 UIViewController

appDelegate 推送 UIViewController 可以采用以下步骤:

  1. appDelegate.swift 文件中,使用 weak 关键字声明一个弱引用,指向即将被推送的 UIViewController 类型(例如:weak var targetViewController: UIViewController?)。这将确保在控制器生命周期中,该引用保持弱引用,有助于避免循环引用问题。
代码语言:swift
复制
class AppDelegate: UIResponder, UIApplicationDelegate {
    weak var targetViewController: UIViewController?

    // ... 其他代码 ...
}
  1. func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool 方法里,添加如下代码来启动推送:
代码语言:swift
复制
    if let targetViewController = targetViewController {
        DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
            targetViewController.dismiss(animated: true, completion: nil)
        }
    }

这里的 DispatchQueue.main.asyncAfter 代码块会在 1 秒后执行 targetViewController.dismiss 方法,从而将推送的 UIViewController 关闭。

  1. 确保在 targetViewController 实现了 Dismissable 协议,这样当用户点击推送按钮时,UIViewController 将自动关闭。
代码语言:swift
复制
class MyViewController: UIViewController, Dismissable {
    // ... 其他代码 ...

    // 覆盖 `dismiss(animated:completion:)` 方法
    func dismiss(animated flag: Bool, completion: ((Bool) -> Void)? = nil) -> Bool {
        // ... 实现 dismiss 逻辑 ...
        return true
    }
}

现在,你已经拥有了一个从 appDelegate 推送 UIViewController 的功能。用户点击推送按钮时,UIViewController 将被关闭。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

AppDelegate减负之常用三方封装 - 友盟推送

之前分享过集成友盟推送的方法, 需要的朋友可以查看一下链接: http://www.cnblogs.com/zhouxihi/p/6533058.html 一般开发中我们比较多使用的三方有友盟推送, 友盟分享...光集成一个友盟推送就要好几十行代码, 如果多集成几个AppDelegate就会变得臃肿不堪, 也降低了可读性 为了解决这个问题, 目前想到以Category的方式给AppDelegate添加新的类别去完成这些三方集成...先以友盟推送为例 具体方法为先创建一个类别AppDelegate+UMengPush.h 给类别添加一个userInfo属性用来临时存放接收到的推送消息, @property (nonatomic,..., 只要配置好key, 在AppDelegate中只要简单一句话就完成了 #import "AppDelegate.h" #import "AppDelegate+UMengPush.h" @interface...AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application

784110

AppDelegate减负之常用三方封装 - 友盟分享 三方登录篇

之前完成了 AppDelegate减负之常用三方封装 - 友盟推送篇: http://www.cnblogs.com/zhouxihi/p/7113511.html 今天接着来完成 - 友盟分享和三方登录篇...libsqlite3.0.tbd到Linked Frameworks, 在Build Settings -> Linking -> Other Linker Flags 添加-ObjC 然后我们就可以开始了 首先跟之前友盟推送部分一样...All rights reserved. // #import "AppDelegate+UMSocial.h" #import "AppKey.h" @implementation AppDelegate...define AppKey_h /* Notice: 以下定义内容, 请不要删除以免编译报错 如果不需要集成某一个SDK, 可以将对应的appKey内容清空, 只保留@"" */ // 友盟推送..." #import "AppDelegate+UMengPush.h" #import "AppDelegate+UMSocial.h" 最好把这三个加到pch中 分享部分我们简单以分享文本做个示例

56970
  • iOS横竖屏切换

    工程配置、AppDelegateUIViewController这三者,在横竖屏切换过程的关系是什么? 自动旋转和手动旋转有什么区别? .......系统如何知道App对界面朝向的支持 这里分两种情况,App启动前和App运行时。...App启动前 在App启动前进程还未加载,代码无法运行,系统肯定无法通过AppDelegate或者UIViewController这种代码的方式获取横竖屏的配置。...此时AppDelegate控制的是UIWindow层面的朝向,UIViewController控制的是VC层面的朝向。...当我们从一个竖屏界面push一个横屏界面时,即使横屏界面设置了shouldAutorotate=YES,这个界面也不会变成横屏,但是拿起来设备左右翻转的时候,会发现随着设备旋转,界面也横屏变成了竖屏。

    2.6K20

    iOS集成极光推送iOS集成极光推送

    apns_15.png 一、注册极光推送帐号 可登录 极光推送官网 注册帐号。 注册成功后进入控制台 ? apns_12.png ?...apns_17.png 下面是我写的代码: AppDelegate.m文件 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions...收到通知消息后,在AppDelegate.m跳转到指定界面的方法: UIViewController *vc = [[UIViewController alloc] init]; [self.window.rootViewController...我的情况是这样,代码里设置的是生产环境,由于公司要求使用 alias 来区分需要推送通知的用户,再使用 xcode 测试的时候,使用极光推送控制台向指定 alias 推送通知,在极光推送控制台设置 iOS...以上是我在配置极光推送的时候遇到的一些问题,记录下来,希望遇到类似问题的小伙伴,可以帮助你解决遇到的问题。? 至此极光推送告一段落。

    2.9K21

    如何Django应用程序发送Web推送通知

    视图是Web请求返回响应对象的函数。该 send_push 视图将使用Django-Webpush库发送包含用户在主页上输入的数据的推送通知。...根据私钥检查此公钥,以确保允许具有公钥的客户端服务器接收推送消息。 user:此变量来自传入请求。每当用户向服务器发出请求时,该用户的详细信息都存储在该user字段中。...当用户主页上的表单发送推送通知时,数据将包括head和body以及接收用户的id。...您已经创建了一个Web应用程序,可以在服务器上触发推送通知,并在服务工作者的帮助下接收并显示通知。您还完成了获取应用程序服务器发送推送通知所需的VAPID密钥的步骤。...结论 在本教程中,您学习了如何使用通知API订阅用户以推送通知,安装服务工作者和显示推送通知。 您可以进一步配置通知,以便在单击时打开应用程序的特定区域。可以在此处找到本教程的源代码。

    9.8K115

    iOS开发·UIWindow与视图层级调整技巧(makeKeyWindow,resignKeyWindow,makeKeyAndVisible,keyWindow,windowLevel,UIWind

    如何查看App的UIWindow层级 一. 为App初始化一个默认UIWindow对象 在AppDelegate.m中需要初始化一个window属性,作为后面往App添加视图的容器 1....指定自定义视图控制器 UIViewController *vc = [[UIViewController alloc]init]; _window.rootViewController = vc; 3....(hidden如果是NO改为NO的不 算 最后 改变UIWindow的显示状态) 对于makeKeyAndVisible方法,最终显示的以最后 执行过 makeKeyAndVisible 的UIWindow...获取AppDelegate单例的window属性 专门获取AppDelegate.m文件中的window属性,不包含其它其定义的window [[[UIApplication sharedApplication...] delegate] window] 拓展一下,获取AppDelegate单例的方法为 + (AppDelegate *)sharedDelegate { return (AppDelegate

    7.9K10

    iOS-UIApplication详解iOS-UIApplication详解

    这时我们基本可以理清,苹果内部如何实现UIApplication单例。...class] 相当于 @"AppDelegate"; 此时我们可以根据UIApplicationMain函数了解程序启动的过程 根据传递的类名创建UIApplication对象,这是第一个对象...联网指示器显示效果图 管理状态栏 iOS7开始,系统提供了2种管理状态栏的方式 a.通过UIViewController管理(每一个UIViewController都可以拥有自己不同的状态栏)在iOS7...中,默认情况下,状态栏都是由UIViewController管理的,UIViewController实现下列方法就可以轻松管理状态栏的可见性和样式 状态栏的样式   - (UIStatusBarStyle...@interface AppDelegate : UIResponder 下面我们来看一下AppDelegate的方法 // AppDelegate:监听应用程序的生命周期

    1.6K70

    推送入门到放弃

    推送 推送简直就是一种轻量级的骚扰方式 自从有了推送,各个公司基本上都在使用推送,这确实是一个比较好的提醒方式,Android较iOS强的一个部分,也就是在于Android的Notification...第三方推送服务 专业的第三方推送 极光 个推 友盟推送 手机ROM厂商推送 华为推送 小米推送 BAT级别的全家桶 阿里推送 信鸽推送 百度推送 关于第三方推送服务在各个App中的使用率,大家可以参考贾吉鑫的那篇文章...另外,小米推送、华为推送,大家接入的原因可能很简单,就是他们的手机市场占有率比较高,接入他们自家的推送,可以在一定程度上提高到达率,但需要注意的是,推送分为透传和非透传两种方式,透传即我们自己App处理推送消息...OK,推送发出去后,客户端收到推送消息,并产生回执,代表完成了一次推送,假设这些完成推送的设备是55w,这个就是送达设备数。...例如,我们现在整合了『小米推送、极光推送、华为推送』,在系统启动的时候,判断当前系统,如果是小米系统,则启用『小米推送』,如果是华为手机,则启用『华为推送』,其它的Android设备,则启用『极光推送

    1.9K20

    基础篇-UIApplication、UIWindow以及程序的启动流程看我就够了

    应用程序的生命周期事件(启动,关闭,进入后台) 应用级跳转(openURL的接收) 注册通知、推送等 内存警告 # 当应用程序启动完毕的时候就会调用(系统自动调用) - (BOOL)application...application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options #注册通知、推送等...那么UIWindow是如何将View显示到屏幕上的呢? 这里有三个重要的对象UIScreen,UIWindow,UIView。 UIScreen对象识别物理屏幕连接到设备。...class])); } } 这个默认的iOS程序就是main函数开始执行的,但是在main函数中我们其实只能看到一个方法,这个方法内部是一个消息循环(相当于一个死循环),因此运行到这个方法UIApplicationMain...; ---- 程序启动的完整过程 1. main函数 2.UIApplicationMain 根据第三个参数创建对应的UIApplication对象 根据第四个参数AppDelegate创建并指定此对象为

    1.6K20

    iOS数据埋点统计方案(附Demo): 运行时Method Swizzling机制与AOP编程(面向切面编程)

    UIViewController+Trace #import "UIViewController+Trace.h" #import "TraceHandler.h" #import <objc/runtime.h...UIViewController+Trace #pragma mark - 2.使用Aspects框架 + (void)load{ [UIViewController aspect_hookSelector...为全局AppDelegate设计的分类:AOP编程方案 场景需求:需要监听不同类,不同按钮,系统方法,及表单元点击事件 方案特点:是可代码配置需要监听的清单字典,并且需要注入的统计代码块block...AppDelegate+Trace.m #import "AppDelegate+Trace.h" #import "TraceManager.h" @implementation AppDelegate...在AppDelegate的类方法中根据Plist监听清单进行HOOK 场景需求:需要监听不同类,不同按钮,系统方法,及表单元点击事件 方案特点:是可代码配置需要监听的清单Plist,但是不能将需要注入的统计代码块

    90210

    iOS四大对象之UIWindow及四大对象之间的关系1. UIWindow使用纯代码加载根控制器2. UIWindow的创建过程3. 四大对象之间的关系

    *mainController = [[UIViewController alloc] init]; // 给窗口指定根视图控制器 window.rootViewController...所以需要在AppDelegate.h里面创建一个强引用的属性,定义window。然后赋值。...四大对象之间的关系 1.UIApplication :delegate属性 2.AppDelegate :window属性 3.UIWindow :rootViewController属性 4.UIViewController...:view属性 第一个创建的对象是UIApplication UIApplication绑定一个AppDelegate对象 AppDelegate对象中有一个window属性(UIWindow)...UIWindow对象中有一个rootViewController的属性 rootViewController设置成要显示的UIViewController 最后 显示出UIViewController

    1.7K30
    领券