首页
学习
活动
专区
工具
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 属性的使用方法

,但是微信在前台的时候也能推送消息,方法是:创建一个view,仿造系统消息通知的样式向下出现,点击后回到根控制器再进行跳转(注意压栈) 点击通知打开通知的app 不管程序打开还是关闭,推送都能如期发出...(将本地通知加入本地通知调度池,iOS 7 到这一步完毕,不需要授权) [[UIApplication sharedApplication] scheduleLocalNotification:localNotifi...8_0); 区域是否只检测一次 @property(nonatomic,assign) BOOL regionTriggersOnce NS_AVAILABLE_IOS(8_0); 10、设置启动图,点击推送通知打开...(8_2); 12、设置通知推送携带的参数,一般用于点击通知打开指定控制器页面 @property(nullable, nonatomic,copy) NSDictionary *userInfo; 例子...: 发送通知时,带一个索引2的参数,点击通知打开程序后自动跳到第三个控制器(TabBarController) localNotifi.userInfo = @{@"selectIndex" : @(2

2.5K60

iOS 9人机界面指南(三):iOS 技术 (中) - 腾讯ISUX

例如,用户可以待办事项应用的通知中就标记该事项已完成,而无需额外打开应用。 iOS定义了两种类型的通知。...本地通知(local notification)由应用安排待发送,最终通过iOS发送到同一设备中,无论该应用当前是否正在后台运行。...为了使本地或远程通知信息更有作用,你应该: 专注于信息而不是用户的行为。避免告诉人们点击哪个按钮或如何打开你的应用 足够简短,一两行就可以显示完整。...iOS以人们喜欢的方式将社交媒体的交互与你的应用进行了整合。 ? 注意:当用户点击动作按钮时,他们会得到一个如上图的动作视图控制器。...想要了解更多关于这个视图控制器的内容,请参见Activity View Controller。 动作视图控制器的中间一行显示了用户启用的和系统提供的分享应用扩展。

3.3K50

iOS 9人机界面指南(三):iOS 技术 (上)

应用内,人们可以使用多种按压操作去获取一个项目的预览,可以独立的视图打开一个项获取相关操作。...可以考虑本地缓存信息,以便当有更新时就可显示最近信息。人们只希望今天视图中花很少的时间,如果部件使用内存不当,iOS就可能会终止它 适当情况下,让人们点击你的今天部件来打开你的应用。...注意: 虽然部件打开应用的方式对用户来说还不错,但继续部件中提供有用且及时的信息依然是很重要的。人们可不一定会欣赏一个功能只是打开应用的今天部件。...注意: 动作视图控制器中,iOS只会显示支持当前内容类型的动作扩展。例如,当用户当前内容是视频时,iOS就不会显示支持文本的动作扩展。 尽可能在分享扩展中使用系统提供的UI。...适度使用本地通知。应用可以特定时间发送本地通知,无论应用是暂停中还是运行中亦或是根本就没有运行。为了达到最好的用户体验,应避免用过多的通知来骚扰人们,并遵循通知中创建通知内容的指南。

1.6K60

UIViewController生命周期

一、视图控制器 UIViewController采用懒加载的方式,也就是说第一次访问到view属性时才会加载或创建它。...由于视图视图控制器管理,所以讨论视图的加载方式时,主要讨论视图控制器的加载方式。 通过Storyboard加载:这是苹果推荐的方式。...此时整个视图层次(view hierarchy)已经被放到内存中。 无论是nib文件加载,还是通过纯代码编写界面,viewDidLoad方法都会执行。...4、viewWillLayoutSubviews 即将开始子视图位置布局 5、ViewDidLayoutSubviews 用于通知视图的位置布局已经完成 6、ViewDidAppear 当viewWillAppear...继承关系来看,UIWindow继承自UIView,所以UIWindow除了具有UIView的所有功能之外,还增加了一些特有的属性和方法,而我们最常用的方法,就是App刚启动时,调用UIWindow的

1.8K10

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

此外,UIApplication实例还维护一个本应用中打开的window列表(UIWindow实例),这样它就可以接触应用中的任何一个UIView对象。...iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的View,最后将控制器的View添加到UIWindow上,于是控制器的View就显示屏幕上了。...程序就是main函数开始执行的,但是main函数中我们其实只能看到一个方法,这个方法内部是一个消息循环(相当于一个死循环),因此运行到这个方法UIApplicationMain之后程序不会自动退出,...分配新视图控制器到窗口root viewcontroller,然后使窗口显示屏幕上。...分配新视图控制器到窗口root viewcontroller,然后使窗口显示屏幕上。 四大对象关系图和程序启动流程图 ? ?

1.5K20

iOS视频功能模块的开发 原

iOS视频功能模块的开发 一、使用MPMoviePlayerController进行视频播放         MPMoviePlayerController是iOS中进行视频播放开发的一个控制类,里面涵盖了视频播放中大部分的需求功能...,使用这个框架时,需要导入头文件。...1、初始化方法         MPMoviePlayerController可以播放网络视频,也可以播放本地视频,通过不同的URL来进行初始化,例如本地视频的初始化如下: //视频文件路径     NSString...,这个控制器只提供的控制的相关功能,外部的UI并没有为我们提供好。...二、MPMoviePlayerViewController视频视图控制器         如果你很熟悉MVC,你可能会觉得MPMoviePlayerController的设计模式非常蹩脚,强行要求你将控制器视图分离出来加在另外的

1K70

iOS视频播放的基本方法

而值得注意的是,上述的MPMoviePlayerController与MPMoviePlayerViewControlleriOS9.0之后被弃用。...,使用它播放视频需要将其自带的视频View添加到视图控制器的View上才能显示视频,使用步骤如下: 第一步:引用MediaPlayer框架,声明视图控制器属性PlayerController #import...,关闭播放器,移除通知 - (void)dealloc{ //当前视图控制器pop之后并不会关闭播放,需要手动关闭 [self.playerController stop]; self.playerController...使用这种方式播放的优点在于可以指定播放界面的原始尺寸大小,但是值得注意的是AVPlayerViewController必须被当前视图控制器所持有,以防止被当做局部变量被释放。...为了满足这一条件,我们可以将AVPlayerViewController作为属性,也可以使用addChildViewController方法将其作为当前视图控制器的子视图控制器,示例代码如下: //步骤

4.2K20

iOS程序框架设计之皮肤切换功能 原

iOS程序框架设计之皮肤切换功能 一、引言         移动应用的开发中,有时我们会需要例如更换皮肤此类的功能,andorid采用xml配置UI的方式,这个问题或许还容易解决些,iOS的主要UI逻辑则是代码中控制的...二、设计思路与框架         首先我的设计思路是采用通知的方式,原理可以如下理解为以下几步:         1、系统的通知中心注册一个通知         2、所有需要更改皮肤功能的controller...作为这个通知的监听者         3、设计一个皮肤的model类         4、将controller中有关皮肤设置的属性model中取         5、切换皮肤前更改皮肤model...中,本地读取当前的主题模式,更改后我们只需要更改本地数据 然后重新调用这个方法即可 -(void)getTopicModel{     //本地读取     int  tp = [YHSASystemSettingManager...调用通知中心发送通知后,我们要让所有需要改变主题的视图控制器都接收到通知,最简便的做法是,我们设计一个父类,让父类监听通知,所有需要有主题更改功能的控制器继承于它即可,这个father controller

56240

ViewController及View的生命周期1. 起因2. Controller的生命周期3. View的生命周期4. 内存警告

Controller的生命周期 系统提供了控制器显示到消失的四个方法。 千万不要看到方法名中间出现了view就以为这是视图的方法。这些都是控制器的生命周期。...(5_0); 四个方法中: isMovingFromParentViewController 会在viewWillDisappear & viewDidDisappear 方法内部调用这个方法判断视图控制器视图的隐藏是否因为视图控制器它的容器视图控制器移除...didMoveToSuperview:会通知相关视图他们的上级视图已经变化。添加和移除都会调用,所以要判断 superView在不在。...willMoveToWindow:视图移动前发出的回调。 willRemoveToSubview:回调通知视图视图即将被删除 4. 内存警告 首先要判断一下,当前view有没有被显示。...实际开发中为了写的少点,都会写在基类控制器中。 官方说,iOS 6.0以后系统就不会自动清理,需要手动清理。

1.3K30

iOS 常用设计模式汇总

软件开发中,无论是那种高级语言中总会伴随着一些最为常用的设计模式,下面针对iOS中,MVC模式、代理模式、观察者模式、单例模式、策略模式、简单工厂模式这六大模式进行汇总分析。...用户视图层中所进行的创建或修改数据的操作,通过控制器对象传达出去,最终会创建或更新模型对象。模型对象更改时(例如通过网络连接接收到新数据),它通知控制器对象,控制器对象更新相应的视图对象。...尽管如此, MVC 应用程序中,视图对象通常与模型对象分离。 iOS应用程序开发中,所有的控件、窗口等都继承自 UIView,对应MVC中的V。...1.1.3控制器对象 应用程序的一个或多个视图对象和一个或多个模型对象之间,控制器对象充当媒介。控制器对象因此是同步管道程序,通过它,视图对象了解模型对象的更改,反之亦然。...三、观察者模式 观察者模式本质上是一种发布-订阅模型,用以消除具有不同行为的对象之间的耦合,通过这一模式,不同对象可以协同工作,同时它们也可以被复用于其他地方ObserverSubject订阅通知,ConcreteObserver

1.7K10

iOS字符串的本地化(APP 内的本地化切换) 、nib本地化、图片本地

3.1 APP 内的本地化切换 iOS APP 内的本地化切换【修订】 3.2 一个语言对应多个字符串资源文件的方案 3.3 iOS本地化字符串指定参数顺序(应用:app内的多语言切换) iOS..."]; III、字符串本地化 应用场景: iOS APP 内的国际化切换 (对话框中的文字)、 应用名称本地化 3.1 APP 内的本地化切换 【iOS APP 内的国际化切换】1、字符串的本地化...(采用) 2、通过发通知,到各个控制器更新文字(不采用) 3.2 一个语言对应多个字符串资源文件的方案 应用场景:解决部分英文国际化没有生效的问题 存储国际化英文字符串的.string文件长度受限,...3.3 iOS本地化字符串指定参数顺序(应用:app内的多语言切换) CSDN下载【iOS APP 内的国际化切换】demo源码:https://download.csdn.net/download...2、应用内切换语言生效的技术实现:采用销毁根控制器,重新进入一次 3、本地化字符串指定参数顺序 ———————————————— 版权声明:本文为CSDN博主「#公众号:iOS逆向」的原创文章,遵循CC

1.5K30

聊聊iOS中的 MVC、MVP、MVVM以及 VIPER等代码组织方式

- Views(视图) - 展示层(GUI)。对于 iOS理论上来来说所有以 UI 开头的类基本都属于这层。...- Controller/Presenter/ViewModel(控制器/展示器/视图模型) 它是 Model 和 View 之间的胶水或者说是中间人。... MVP 中,Presenter 可以理解为松散的控制器,其中包含了视图的 UI 业务逻辑, 所有视图发出的事件,都会通过代理给 Presenter 进行处理; 同时,Presenter 也通过视图暴露的接口与其进行通信...ios中,MVVM编码可能会成这样 这个图解准确地描述了什么是 MVVM:一个 MVC 的增强版, 我们正式连接了视图控制器,并将表示逻辑 Controller 移出放到一个新的对象里, 即 View...参考文章: 设计框架(MVC、MVP、MVVM、VIPER)的演化说明总结 iOS VIPER架构实践(一):MVC到MVVM到VIPER 深入分析MVC、MVP、MVVM、VIPER 浅谈开发中的

4.1K21

IOS小组件(8):App与Widget数据共享

数据共享方式  可以通过网络和本地数据两种方式进行数据的共享,本地数据共享可以通过 App Groups。...App Groups 原理   它是 iOS 8 之后推出的 App 之间共享数据的方式,只需要简单的配置就可以实现数据的共享。它主要用于同一group下的app共享同一份读写空间,以实现数据共享。...当手机App有新的数据保存时,不能及时的通知Widget更新数据,只能是Widget下次去主动获取数据。 ? ?...app中开启: TARGETS-->AppExtensionDemo-->Capabilities-->App Groups 找到以后,将App Groups右上角的开关打开,然后选择添加groups...以上来自于实际测试,测试过程是:宿主app运行期间,点击其中的按钮弹出模态视图控制器,进行数据填充。

2.6K20

IOS开发基础系列】UIView专题

iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示屏幕上了。...问题描述1:当view发生一些事件的时候,通知控制器,但是控制器已经销毁了,所以可能出现未知的错误。     问题描述2:添加一个开关按钮,让屏幕360度旋转(两者的效果不一样)。...2.获取UIwindow (1)[UIApplication sharedApplication].windows          本应用中打开的UIWindow列表,这样就可以接触应用中的任何一个...    子类可以重写这个方法来提供一些特定的必要实现 willRemoveSubview:     由子类重写用来视图接收者视图中移除前执行一些特定的方法。...消息或者子视图接收者视图层次中移除因为它要被添加到其他视图了 3 UIView动画 3.1 概述         UIView视图的动画功能,可以使更新或切换视图时有放缓节奏、产生流畅的动画效果,进而改善用户体验

43730

iOS Push详述,了解一下?

离线push是需要经过苹果的APNs服务器才可以推送到某台设备的某个APP上的,这是和本地push的本质区别。push与设置中是否打开通知”有关。...静默推送是iOS7之后推出的一种推送方式。它与其他推送的区别在于允许应用收到通知后在后台(background)状态下运行一段代码,可用于服务器获取内容更新。...本地push实现 一、 iOS10以前本地push弹出方式 -------------------- 试验过iOS10以前的本地push方法iOS10+的系统也能使用,不过可能有些参数不生效。...language=objc 三、携带action的通知 ------------- 上面提到的“打开”、“收藏”、“不感兴趣”这些选项其实就是push携带的action,其实iOS8开始,通知已经可以携带...经过1年半的内部运营,腾讯内部应用的iOS审核通过率平均35%提升到90%+。 现将腾讯内部产品的过审经验,以线上工具的形式共享给各位。WeTest腾讯质量开放平台上可以在线使用。

4.4K60

iOS Push技术

“在线Push”; 2)本地Push:这种就是最常见的iOS系统通知(作用相当于传统PC端的提示窗口,iOS10以后全部整合到UserNotifications.framework框架了),不涉及任何网络数据...离线push是需要经过苹果的APNs服务器才可以推送到某台设备的某个APP上的,这是和本地push的本质区别。push与设置中是否打开通知”有关。...静默推送是iOS7之后推出的一种推送方式。它与其他推送的区别在于允许应用收到通知后在后台(background)状态下运行一段代码,可用于服务器获取内容更新。...; UNLocationNotificationTrigger 用户必须达到的地理位置才能提供本地通知; UNPushNotificationTrigger 表示通知...6.3 携带action的通知 上面提到的“打开”、“收藏”、“不感兴趣”这些选项其实就是push携带的action,其实iOS8开始,通知已经可以携带action了。

1.7K30

IOS开发基础系列】UIAlertController专题

、更灵活,因此许多视图控制器的实现方式发生了巨大的变化。...全新的UIPresentationController实现视图控制器间的过渡动画效果和自适应设备尺寸变化效果(比如说旋转)中发挥了重要的作用,它有效地节省了程序员们的工作量(天地良心啊)。...Observer,我们通过每个按钮动作的handler代码块(还有其他任何可能释放视图控制器的地方)中添加合适的代码来实现它。...释放对话框控制器         通常情况下,当用户选中一个动作后对话框控制器将会自行释放。不过您仍然可以需要的时候以编程方式释放它,就像释放其他视图控制器一样。...假定我们正在监听UIApplicationDidEnterBackgroundNotification通知消息,我们可以observer中释放任何显示出来的视图控制器

34730

iOS14开发-UIViewController

响应用户与视图的交互。 负责界面的切换与传值。 响应设备的方向变化。 有一些特殊的视图控制器(导航控制器、标签栏控制器)可以更加方便和规范地管理 UIView。...顺向传值只需要在目标控制器中声明需要接收的参数,然后控制器中进行传值即可。 storyboard 方式。 代码方式。...逆向传值 逆向传值即按照 UIViewController 跳转的顺序反向进行传值,比如控制器A跳转到控制器B,控制器B返回控制器A时进行传值,这种方式就是逆向传值。...其他 UITableViewController:表视图控制器,集成了 UITableView 的视图控制器。...UICollectionViewController:集合视图控制器,集成了 UICollectionView 的视图控制器

2.3K20

iOS初步集成极光推送后你还要做这些事

● 当有多个类型通知的时候,怎么拿到服务器发送过来的extras的内容,然后根据类型做出正确的跳转? ● 怎么app内部开启、关闭通知?...● 你测试包(真机调试)收到通知后,怎么确定上架包也能收到消息? 今天小伙伴问我Badge怎么弄,我这边徽章个数是服务器请求的,使用WZLBadge这个三方绘制的。...调用这个三方的时候你首先要获取当前顶层控制器赋值给这个三方。...自定义消息,这个比较特殊,它必须是app正在前台的时候才能收到消息,收到消息的位置而且不在代理中,而是一个通知中。 ? 当注册极光后可以加入下面代码。注册一个通知。...○ 怎么app内部开启、关闭通知? 一般都在app设置中有一个switch的开关。来开启关闭通知,代码很简单,直接贴上来。有一点需要注意,就是这个开关的状态需要存到本地,有高要求的存服务器。

2.8K50
领券