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

在没有StoryBoard的情况下点击通知时访问特定的ViewController (以编程方式)

在没有Storyboard的情况下,可以通过编程方式实现在点击通知时访问特定的ViewController。以下是一种实现方式:

  1. 创建一个自定义的通知处理类,继承自UNUserNotificationCenterDelegate,并实现其中的didReceive(_:withCompletionHandler:)方法。
代码语言:txt
复制
import UserNotifications

class NotificationHandler: NSObject, UNUserNotificationCenterDelegate {
    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
        // 获取通知的标识符
        let identifier = response.notification.request.identifier
        
        // 根据标识符判断需要打开的ViewController
        if identifier == "NotificationIdentifier" {
            let viewController = SpecificViewController()
            
            // 在这里可以进行一些其他的处理,例如传递参数等
            
            // 获取当前的window
            guard let window = UIApplication.shared.windows.first else {
                return
            }
            
            // 设置ViewController为rootViewController
            window.rootViewController = viewController
            window.makeKeyAndVisible()
        }
        
        // 完成处理
        completionHandler()
    }
}
  1. 在AppDelegate中注册通知处理类,并设置UNUserNotificationCenter的delegate为该类。
代码语言:txt
复制
import UIKit
import UserNotifications

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    let notificationHandler = NotificationHandler()

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // 注册通知处理类
        UNUserNotificationCenter.current().delegate = notificationHandler
        
        // 请求用户授权通知
        UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in
            // 处理授权结果
        }
        
        // 其他初始化操作
        
        return true
    }
    
    // 其他AppDelegate方法
}
  1. 在发送通知的地方,使用UNUserNotificationCenter来发送通知,并设置通知的identifier为特定的值。
代码语言:txt
复制
import UserNotifications

func sendNotification() {
    let content = UNMutableNotificationContent()
    content.title = "通知标题"
    content.body = "通知内容"
    content.sound = UNNotificationSound.default
    content.badge = 1
    
    // 设置通知的identifier为特定的值
    let request = UNNotificationRequest(identifier: "NotificationIdentifier", content: content, trigger: nil)
    
    // 发送通知
    UNUserNotificationCenter.current().add(request) { (error) in
        // 处理发送结果
    }
}

以上代码示例中,通过自定义的通知处理类,在点击通知时判断通知的标识符,如果是特定的值,则创建并设置特定的ViewController为rootViewController,从而实现在点击通知时访问特定的ViewController。

腾讯云相关产品和产品介绍链接地址:

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

相关·内容

iOS项目——项目开发环境搭建

这些小格子主要分为四类: Notification:通知图标,类似有应用相关推送消息,有时候需要显示本应用图标则会显示这个尺寸 Spotlight:搜索小图标,当在Spotlight中输入应用名...二来则是我们点击应用图标启动应用时,应用启动需要一定操作时间,启动期间,为了增强应用程序启动用户体验,您应该提供一个启动图像。启动图像与应用程序首屏幕看起来非常相似。...当用户主屏幕上点击应用程序图标,iPhone OS会立即显示这个启动图像。一旦准备就绪,您应用程序就会显示它首屏幕,来替换掉这个启动占位图像。...两种方法之间主要区别在于启动文件优先级高于启动图片,也就是说如果两个都设置了,那么启动页面启动文件为准,如果都没有设置,则应用会黑屏。   ...5 设置主界面(废弃storyboard)   现在新建一个project,xcode会默认主界面是通过main.storyboard设置App主界面的,而设置主界面的方法除了这个还有另外一个方法就是通过代码方式进行设置

1.4K150

iOS对UIViewController生命周期和属性方法解析

三、从storyBoard加载UIViewController实例传值陷阱         我们知道,当我们从StoryBoard中加载ViewController,我们Controller中拖拽视图是可以被初始化..."]; 我们可以ViewController2storyBoard中拉一个label,然后关联到头文件中,如下打印,会发现我们得到controller,里面的视图对象并没有进行创建: ViewController2...ViewConroller,我们一般有两种方式创建,一种是用纯代码方式,一种是与StoryBoard关联,UIViewController中,有许多方法方便我们与StoryBoard进行交互联系。...1、ViewController直接在StoryBoard中进行跳转传值         StoryBoard中进行界面跳转是十分方便,我们StoryBoard中拉入两个ViewController...我们可以把它连接到viewController2中一个按钮上: ? 这样,当我们点击viewController2中按钮,就会返回到我们第一个ViewController1中了。

2.9K20

成为一名优秀 Swift 开发人员 10 个小技巧

但是,当应用程序开始增长,需要处理数十个 ViewController ,使用代码来管理和处理导航比使用 Segues 和 Storyboards 更加便捷。...此外,通过代码导航可以导航更好地控制共享参数和特定行为。还可以避免让 Storyboard 变得一团糟。 5. 项目中集成最热门第三方库 尽量不要重新发明轮子。...为项目选择正确库是一项有意思工作,大多数情况下,使用基本库就正确做法。这可以让你专注于特定应用程序特定功能,而不是常见功能上浪费时间。...其次,尽可能选择屏幕上方输入。用户可能被迫伸出手来操作它,但是最好实现 UIScrollView 并处理滚动操作以避免键盘覆盖输入内容。 9.使用通知 通知中心是组件之间分发消息好工具。...此外, UI 元素上使用 tag 来标识它们,而不是使用其标题或其它内容来区分。 结论 我没有提到所有基本 OOP 原则。显然,您必须正确方式实现类,封装,抽象和设计模式。

2.3K40

【IOS开发基础系列】Storyboard专题

那么,没有 MainWindow.xib 文件情况下,故事板是怎样被加载到app中呢?         ...这种方式,你可以创建超过 5 个ViewController 给TabBarController,它将自动Tabbar 上显示 More... 按钮。...cell 拷贝(也可能是一个已经存在cell——复用情况下)。...设计自己TableViewCell ,你需要注意一些地方。首先,你应当设置Label Highlighted Color(高亮色) ,以便用户点击表格行时感觉更好。         ...3 设计原则 3.1 布局设计原则 3.1.1 一个控件布局尽量只采用一种方式,要么是Storyboard(XIB)要么是代码         因为视图刷新,会直接从Storyboard中加载控件大小

76930

Xcode:处理故事板更好方式 享受Interface Builder提示和技巧

您需要为每个ViewController分配storyboard ID,这很容易出错:每次要在代码中使用ViewController都需要对此ID进行硬编码 如何在项目中连接不同故事板?...1.使用Xcode 7中引入故事板引用 2.代码中连接故事板。 你可以阅读更多关于第一种方式在这里。 我将介绍第二种方式,因为它仍然常用于复杂项目。...代码中初始化基于storyboardviewController,我经常会看到以下代码: let storyboard = UIStoryboard(name: “Main”, bundle: nil...HomeViewController } } 如果要通过 instantiateInitialViewController()访问ViewController ******,请确保Interface...在这种情况下,从按钮拖动到“退出”出口是期望代码已经项目中。 通常,当您为按钮创建动作插座,它会将代码放在拥有该按钮同一个类中。

1.4K30

Swift 项目 - Xib | StoryBoard 多人协作技巧

StoryBoard 和 Xib 都是用来分离UI样式代码,改善视图代码重用率,增加所见即所得,降低视图测试繁复度视图系列化工具, 其中Xib视图View为主, StoryBoard 控制器Controller...值得一提是,通过此种方式创建ChildViewController,其构造方法晚于主ViewController,但生命周期中viewDidLoad则早于主ViewController, 因此ChildViewController...如果需要在初始化时候拿到主ViewController实例,则应该在主ViewController``viewDidLoad方法中,调用ChildViewController特定方法,把 self...绑定类名改变,对应Storyboard上未做处理,导致运行时崩溃,崩溃内容看不懂!...这个结果是如何出现,不妨大胆猜测一下,可能是由于苹果在对象多次创建情况下Storyboard可能存在缓存复刻机制,来提升效率,而纯代码并没有这样优化。

2K20

【 iOS 应用开发 】 UIKit 控件 ( 代码生成控件 | UIView 属性方法 | Storyboard | Bundle | Property List | 动画 | 图片内存优化 )

ViewController //该方法 UIViewController 创建完成 , 并开始加载到内存中 , 在这个时刻执行该 viewDidLoad 方法 //一般情况下该方法中...即可生成 对应 ViewController 代码 文件 ; 5.Storyboard 代码对应设置 : 点击 Storyboard ViewController , 身份查看器 中配置...如果为 空 才 加载 ) 懒加载优化 : 1.懒加载原则 : ① 用到 某 属性时候才去 加载 ; ② 没有 才 进行初始化 ; 2.点语法说明 : @property (strong,...一般情况下 程序 运行起来 , plist 是不会改变 , 因此 只需要加载一次即可 ; 根据 没有时候才去 初始化 原则 , 只有当属性为 空 , 才执行初始化操作 ; 4.代码 : //...; 3.点击播放动画查看内存 : 点击播放按钮 , 及 播放 完毕之后 , 内存一直保持 36.9M ; 4.分析原因 : 这是 由于 图片 一直 驻留在内存中 没有释放 , 使用 UIImage

3.6K40

Mac开发之 Cocoa 绑定 入门

-视图-控制器完全没有必要,特别是当控制器仅仅是模型与视图之间传递信息(比如一个UILabel需要显示文本来自数据模型内容),为了解决这种情况,苹果公司OSX中引入了Cocoa绑定....Label显示内容是son属性score值 Main.storyboard中选中Label,然后选中Bindings Inspector标签,点击Values,勾选Bingd to为ViewController...,选择ViewController,ViewDidLoad中,添加代码 (8)ViewController添加代码 设置socre初始值 运行一下,你会发现并没有预想结果,如果你使用Objective-C...,简化了开发步骤,同时也减少了Bug可能. 3.2 绑定到控制器 刚刚例子中,我们将视图直接绑定在模型对象属性上,跳过了控制器,这种情况对应简单使用没有问题,但绑定还有更多使用方式,也许你签名例子中已经注意到了...通过cocoa 绑定,我们没有写一行代码就实现了记录用户设置功能~ cocoa中还为我们提供了其他控制器对象来处理应用程序中数据访问,比如NSArrayController,可以处理一组数据集合,

1.8K20

【 iOS 应用开发 】 UIKit 控件 ( UIView 属性 | storyboard 设置 | 模拟器 | 拖线关联 | tag | 软键盘操作 | 颜色值 | 代码生成控件 | 动画设置 )

中进行配置, 这里将 Main.storyboard 设置为程序入口; 2.Main.storyboard箭头 : 这个箭头代表了当加载该 Main.storyboard 界面, 先创建哪个...4.箭头控制 - 拖动 : 界面中有多个 ViewController , 可以将箭头从 ViewController 之间来回拖动, 切换 storyboard 界面 初始 ViewController...; 属性 使用 IBOutlet 修饰 才能与 Main.storyboard控件进行关联, 反之 没有左侧 关联 符号; IBOutlet 只用标识该属性可以与 storyboard 进行连线...方式访问 @property 修饰成员变量, 即访问其自动生成 getter 方法, number1TextField.text 是访问其 text 属性, 即用户输入值; 3.将 NSString...sender { //1.创建 UIButton 按钮, 创建按钮需要制定按钮 Type 类型, 一般情况下使用 Custom 类型, 并设置图片 frame 属性 UIButton

4.7K30

IOS开发之TabBarItem&NavigationBarItem

"工欲善其事,必先利其器",下面主要是对storyboard来进行我们项目框架搭建,必要,用代码实现我们页面效果。...下面的视图控制器之间关系是如何用storyboard拖出来之前博客中有所提及,在这小编就不赘述了。   ViewController之间关系大致入下图: ?   ...换个说法,就是登陆页面storyboard中和其他页面是没有关系,需要我们用业务逻辑来实现,下面是用模态形式来进行视图切换。...我们可以通过storyboard通过拖拽方式来配置我们NavigationBar 也可以通过手写代码方式进行配置:     (1)用storyboard来为我们Navigation Bar添加按钮...我们storyboard中只需要把Hide Bottom Bar on push选中即可,选中之后我们切换到该页面,就不会显示Tab Bar了,如下图所示。 ?

1.3K80

iOS开发系列——Storyboard

如果我们storyboard界面选中ViewControllerXcode右侧切换到Identity Inspector视图就会发现里面当前设置ViewController类,通过这个设置Main.storyboard...Xcode为我们提供了几种方式来实现代码和storyboard控件关联: 1.拖拽控件到代码中(首先点击Xcode右上方“Show the Assistant editor”切换对应视图,然后代码中打开....h文件,同时打开Interface Builder,按住ctrl键拖拽控件到代码中相应位置进行关联),关联后属性或方法前空心圆变成实心表示已经关联到具体控件(注意:事实上,从控件拖拽到代码如果代码中没有定义对应属性和方法...g.gif 如果要删除关联,可以采用第三、第四种方式控件上右键,关联菜单中找到对应关联删除即可。...此外需要注意对于一个控件而言可能有多个事件,当我们使用第三种或第四种方式直接选择具体某个事件关联到login:方法自然没有问题,但是第一、第二、第五种方式没有提示我们关联到哪个事件而是使用一个控件默认事件

3.2K40

iOS面试题梳理(三)

) 4.在编程中:如果我们把一个NSTimer对象NSDefaultRunLoopMode(kCFRunLoopDefaultMode)添加到主运行循环中时候, ScrollView滚动过程中会因为...第二种:点击某个按钮后,所有与之同类型按钮都要修改值,那么可以通过创建按钮将按钮存入到数组中,需要时候遍历查找。 线程与进程区别和联系?...Mode,如果要让任何情况下都回调,则需要设置Mode为Common模式; 实质上,对于子线程runloop默认是不存在,因为苹果采用了懒加载方式。...Storyboard:在编译前提供了可视化界面,可拖控件,可加约束,开发比较直观,而且一个storyboard可以有很多界面,每个界面对应一个类文件,通过storybard,可以直观地看出整个App...服务器端和客户端使用相同数据结构很重要; 使用Autorelease Pool:某些循环创建临时变量处理数据,自动释放池保证能及时释放内存; 正确选择图片加载方式:详情阅读细读UIImage加载方式

1.4K71

UIViewController生命周期

一、视图控制器 UIViewController采用懒加载方式,也就是说第一次访问到view属性才会加载或创建它。...由于视图由视图控制器管理,所以讨论视图加载方式,主要讨论视图控制器加载方式。 通过Storyboard加载:这是苹果推荐方式。...这需要我们loadView 方法中,通过编程创建自己视图层次,并且把把根视图赋值给UIViewControllerview属性。...Inactive未激活:程序在前台运行,不过没有接收到事件。没有事件处理情况下程序通常停留在这个状态。 Active激活:程序在前台运行而且接收到了事件。这也是前台一个正常模式。...但是keyWindow只有一个 ,一般情况下就是我们程序启动设置默认window Normal级别是最低,StatusBar处于中级,Alert级别最高。

1.8K10

iOS,面试必看,最全梳理

因为使用 KVC 键值编码,它必须先解析字符串,然后设置或者访问对象实例变量。 键值观察KVO 键值观察机制是一种能使得对象获取到其他对象属性变化通知 ,极大简化了代码。...代理作用 代理又叫委托,是一种设计模式,代理是对象与对象之间通信交互,代理解除了对象之间耦合性。 改变或传递控制链。允许一个类在某些特定时刻通知到其他类,而不需要获取到那些类指针。...第二种:点击某个按钮后,所有与之同类型按钮都要修改值,那么可以通过创建按钮将按钮存入到数组中,需要时候遍历查找。 线程与进程区别和联系? 一个程序至少要有进城,一个进程至少要有一个线程....Storyboard:在编译前提供了可视化界面,可拖控件,可加约束,开发比较直观,而且一个storyboard可以有很多界面,每个界面对应一个类文件,通过storybard,可以直观地看出整个App...服务器端和客户端使用相同数据结构很重要; 使用Autorelease Pool:某些循环创建临时变量处理数据,自动释放池保证能及时释放内存; 正确选择图片加载方式:详情阅读细读UIImage

1.1K30

2.检查网络状态

当应用程序需要访问网络,它首先应该检查设备网络状态,确认设备网络环境及连接情况,并针对这些情况提醒用户做出相应处理。...最好能监听设备网络状态改变,当设备网络状态连接、断开,程序也应该有相应处理。   工欲善其事必先利器,检查设备网络状态前,我们要先实现两个步骤: 下载,添加Reachability类。...为了程序中访问界面上文本框,将文本框绑定到siteField IBOutlet属性。...方法返回值进行判断,这样即可获取该应用访问网络状态和方式。   ...kReachabilityChangedNotification通知,这意味着当Reachability连接状态发生改变,默认通知中心就会收到该通知,从而触发应用程序委托类reachabilityChanged

1.2K90

iOS两年前面试题总结,现在你掌握了嘛?

因为使用 KVC 键值编码,它必须先解析字符串,然后设置或者访问对象实例变量。 键值观察KVO 键值观察机制是一种能使得对象获取到其他对象属性变化通知 ,极大简化了代码。...代理作用 代理又叫委托,是一种设计模式,代理是对象与对象之间通信交互,代理解除了对象之间耦合性。 改变或传递控制链。允许一个类在某些特定时刻通知到其他类,而不需要获取到那些类指针。...第二种:点击某个按钮后,所有与之同类型按钮都要修改值,那么可以通过创建按钮将按钮存入到数组中,需要时候遍历查找。 线程与进程区别和联系? 一个程序至少要有进城,一个进程至少要有一个线程....Storyboard:在编译前提供了可视化界面,可拖控件,可加约束,开发比较直观,而且一个storyboard可以有很多界面,每个界面对应一个类文件,通过storybard,可以直观地看出整个App...服务器端和客户端使用相同数据结构很重要; 使用Autorelease Pool:某些循环创建临时变量处理数据,自动释放池保证能及时释放内存; 正确选择图片加载方式:详情阅读细读UIImage加载方式

1.1K20

iOS自动化测试XCTest探索

XCTest框架类似于python中unittest框架,声明一个测试case继承XCTestCase和测试方法,测试方法test开头。...写一个简单登录页面,需要帐号 & 密码两个输入框、登录按钮,效果如下图: 1、ViewController层可以编写业务逻辑,给控件增加触发事件。...IBAction) userLogin:(id)obj; @end userLogin方法方法进行绑定 4、输入框绑定事件 ViewController.h里面添加字段,并相应设置字段属性。...5、LaunchScreen.storyboard app启动页布局文件,可以随便加点文案或者启动图啥,苹果规定上架APP启动页必须使用LaunchScreen.storyboard。...测试用例运行 点击test方法名有个播放按钮,点击播放按钮,先build一个被测app,然后build一个测试用app,这个app没有任何页面,启动后执行测试case。

2.7K30

Mac 开发之 做一个JSON转模型属性小公举

创建工程,并在StoryBoard中设置好控件 设置StroyBoard中控件 1....StoryBoard中设置视图controller为ViewController,这样我们就可以通过ViewController类来管理控制器和view了 设置视图控制器类型ViewController...实现功能代码 部分代码截图 全部代码可以从前文项目地址下载,这里贴出需要说明部分代码,解析字符串,我们常常获取Json内容是从网页中拷贝到,因此除了必要去除空白字符,回车,换行和制表符之外...,有时候会发现文本内依然有空白格式内容,这会导致使用NSJSONSerialization解析时候出错,我通过使用c语言方式进行遍历字符串发现这些不可见空白符多数为\240 (偶尔有\302)...COPY功能:使用NSPasteboard COPY功能 到这里,我们整个工具功能基本已经完成了,可以正常运行使用了,但还有一点点细节需要处理一下,就是用户点击关闭窗口,我们要退出应用. 8.

1K20

iOS多线程:『RunLoop』详尽总结RunLoop

1.2 RunLoop和线程 RunLoop和线程是息息相关,我们知道线程作用是用来执行特定一个或多个任务,但是默认情况下,线程执行完之后就会退出,就不能再执行任务了。...1.3 默认情况下主线程RunLoop原理 我们启动一个iOS程序时候,系统会调用创建项目自动生成main.m文件。...;然后对接受到事件通知线程进行处理,并在没有事件时候进行休息。...不做操作和拖动Text View两种情况下愉快正常工作了。...我们项目中Main.storyboard中添加一个Button按钮,并添加点击动作。 然后点击动作代码中加入一句输出语句,并打上断点,如下图所示: ?

2K50
领券