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

在ios 11中从本地通知打开视图控制器

在iOS 11中,可以通过本地通知打开视图控制器。本地通知是一种在设备上发送提醒的方式,可以在特定的时间或位置触发。当用户收到本地通知并点击通知时,可以执行一些操作,例如打开特定的视图控制器。

要实现从本地通知打开视图控制器,需要以下步骤:

  1. 创建本地通知:使用UNUserNotificationCenter类创建本地通知对象,并设置通知的内容、触发条件等。可以设置通知的category和userInfo属性来携带额外的信息。
  2. 注册通知:使用UNUserNotificationCenter的requestAuthorization方法请求用户授权发送通知,并在授权成功后注册通知。
  3. 处理通知点击:在AppDelegate类中的didFinishLaunchingWithOptions方法中,添加对UNUserNotificationCenter的delegate设置,并实现userNotificationCenter(_:didReceive:withCompletionHandler:)方法。在该方法中,可以获取到用户点击的通知,并根据通知的category和userInfo执行相应的操作。
  4. 打开视图控制器:根据通知的category和userInfo,判断需要打开的视图控制器,并使用导航控制器或模态弹出的方式展示该视图控制器。

以下是一个示例代码:

代码语言:swift
复制
import UserNotifications

// 创建本地通知
let content = UNMutableNotificationContent()
content.title = "通知标题"
content.body = "通知内容"
content.categoryIdentifier = "myCategory"
content.userInfo = ["viewController": "MyViewController"]

let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
let request = UNNotificationRequest(identifier: "myNotification", content: content, trigger: trigger)

// 注册通知
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in
    if granted {
        UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
    }
}

// 处理通知点击
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        UNUserNotificationCenter.current().delegate = self
        return true
    }
    
    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
        if response.actionIdentifier == UNNotificationDefaultActionIdentifier {
            let userInfo = response.notification.request.content.userInfo
            if let viewControllerName = userInfo["viewController"] as? String {
                // 根据viewControllerName创建并展示对应的视图控制器
                let viewController = MyViewController()
                // 使用导航控制器展示
                let navigationController = UINavigationController(rootViewController: viewController)
                window?.rootViewController?.present(navigationController, animated: true, completion: nil)
            }
        }
        completionHandler()
    }
}

在上述示例中,创建了一个本地通知,并设置了category为"myCategory",userInfo中携带了需要打开的视图控制器的标识符。在AppDelegate中实现了UNUserNotificationCenterDelegate的方法,当用户点击通知时,会获取到通知的userInfo,并根据其中的viewController标识符创建并展示对应的视图控制器。

这是一个简单的示例,实际应用中可以根据需求进行更复杂的处理,例如根据不同的category打开不同的视图控制器,或者在通知中携带更多的信息来定制视图控制器的展示。

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

相关·内容

iOS 本地推送概念步骤:属性:点击通知跳到指定控制器界面快捷回复功能(iOS 8以后可用), category 属性的使用方法

概念 1.推送通知有5种不同的呈现效果 在屏幕顶部显示一块横幅(显示具体内容) 在屏幕中间弹出一个UIAlertView(显示具体内容) 在锁屏界面显示一块横幅(锁屏状态下,显示具体内容) 更新app图标的数字(说明新内容的数量) 播放音效(提醒作用) 2.用户也可以决定是否要开启以下4个功能: 显示App图标数字 播放音效 锁屏显示 显示在“通知中心” 3、注意: 发送推送通知时,如果程序正在前台执行,那么推送通知就不会被呈现出来,但是微信在前台的时候也能推送消息,方法是:创建一个view,仿造系统消息通

06

iOS10通知框架UserNotification理解与应用

关于通知,无论与远程Push还是本地通知,以往的iOS系统暴漏给开发者的接口都是十分有限的,开发者只能对标题和内容进行简单的定义,至于UI展示和用户交互行为相关的部分,开发者开发起来都十分困难。至于本地通知,iOS10之前采用的是UILocationNotification类,远程通知有苹果服务器进行转发,本地通知和远程通知其回调的处理都是通过AppDelegate中的几个回调方法来完成。iOS10系统中,通知功能的增强是一大优化之处,iOS10中将通知功能整合成了一个框架UserNotification,其结构十分类似于iOS8中的UIWebView向WebKit框架整合的思路。并且UserNotification相比之前的通知功能更加强大,主要表现在如下几点:

03

Objective C (iOS) for Qt C++ Developers(iOS开发,Qt开发人员需要了解什么?)

Qt/C++开发人员眼中的Obj-C 对于我们第一次自己定义iOS应用来说,对于来自Qt/C++开发人员来说,我不得不学习Objective-C相关语法与知识 为了让读者可以更easy理解这篇博客的内容,我将描写叙述诸多我所学到的东西.这将很多其它的是大脑转存而不是单一的教程 ,所以我仍然希望这将对你非常有帮助,我将首先写编程语言的差异,然后再写关于类库的差异 1.Objective C vs C vs C++ 类似于C++,Obj-c是C语言的一个超集(这不是100%正确的,可是一个足够好的语句来理解它),您将使用的文件扩展名的头.h和.m来表示Obj-C语法 注意还有obj- c++文件扩展名.mm,尽管我如今还不会写. 类似于塞班c++,Obj-C是使用两个阶段进行构造:首先你在堆上分配对象,然后调用init方法. 通常能够避免调用两个方法和仅仅使用一个静态简便的方法,直接给你一个新分配的对象(比如stringWithCString). 全然不同(起初很分散)是Obj-C函数的调用方法,类似通常的C-ish方式,比如NSLog(@“我的日志消息”);但也有Obj-C语法对象的调用方法。 作为一个样例,这是对象有一个方法包括两个參数:obj(obj methodName:param1value param2:param2Value]。看起来非常奇怪甚至别扭,但你要去适应它。 在Objective C,这是通常被称为发送消息,不不过它的调用方法,还有好多我发现更加混乱. 在上面这种方法演示样例,methodName是所谓的选择器。一个选择器是一个方法的标识符。有时你必须识别方法(类似于一个函数指针), 在上面的样例中你能够这样写@selector(methodName:param2:). 在c++中没有根对象和Qt QObject仅用于一些对象,Objective C有强制性的根对象NSObject . 相反Qt你想信号/插槽,你仅仅用QObject类,而Obj-c这里你用NSObject做不论什么事情. 自从iOS 5 实现ARC(自己主动引用计数),觉得它像一个隐式QSharedPointer在你的对象。编码过程感觉到你有一个垃圾收集器。在内部,ARC告诉编译器插入保留(添加引用计数)和释放(减量引用计数和终于销毁)语句在您的代码中。 我觉得这是非常棒的,假设你坚持正常的做事的方式你基本上能够不再再操心内存泄漏. Objective C属性类似于Qt中的Q_PROPERTY,这意味着您能够使用好obj.var = foo语法在代码内部(obj setVar:foo)消息称为(好吧. .消息发送)。您能够创建一个属性@property和编译器使用@synthesize为你做一个getter / setter。 当然也能够定制getter / setter实现很多其它的内部逻辑,比如实现延迟初始化。 你能想象Objective C托付作为一组插槽。托付对象的一个托付方法被对象调用通知某些事情已经发生。这很类似于Java的接口 2.与Qt相关类相类似的东西 与语法一样重要是相关的库所提供的iOS(和OS X)。请继续阅读,了解他们提供的对象和功能。 NSString对象是一个常量字符串。您还能够创建通过@“followed by me”。

01
领券