在应用程序设置页面中更改通知的用户权限时更新 UILabel 文本值?

2024-01-04

在我的场景中,用户将收到在应用程序中接收通知的警报。如果用户单击“不允许”,UILabel 将更新为“未启用”。如果用户想要更改通知,用户将被导航到应用程序设置页面以更改通知权限状态。

func checkNotificationPermission(){

UNUserNotificationCenter.current().requestAuthorization(options:[.badge, .alert, .sound]){


        (granted, error) in

        if granted == true {

            DispatchQueue.main.async {
                    print("notificaation access true")
                     self.notificationAccessLbl?.text = "Enabled"         
        }
        }
        else {
            DispatchQueue.main.async {
                self.notificationAccessLbl?.text = "Not enabled" 
            }
        } 
    }
    UIApplication.shared.registerForRemoteNotifications() }

但是,当用户返回应用程序时,当用户从“设置”页面返回应用程序时,UILabel 不会更新。

用于在用户从设置页面进入应用程序后更新应用程序中的 UILabel。我已打过电话

func checkNotificationPermission()

更新 UILabel 值ViewDidAppear()方法和我注册一个函数applicationwillbecomeactive method()请在这方面帮助我。


我在应用程序的设置页面中有开关,允许用户启用禁用推送并将其发送到服务器上,但在此之前用户必须允许从设备的设置页面进行推送。这是我的解决方案

我已经创建了全局对象

var isPushEnabledFromSettings = false {
    didSet {
         // you can set label value here in main queue
    }
}

以及一种检查方法

func isPushPermissionGiven (permission:@escaping (Bool) -> ()) {
    if #available(iOS 10.0, *) {
        let current = UNUserNotificationCenter.current()
        current.getNotificationSettings(completionHandler: {settings in
            switch settings.authorizationStatus {
            case .notDetermined:
                permission(false)
            case .denied:
                permission(false)
            case .authorized:
                permission(true)
            }
        })
    } else {
        // Fallback on earlier versions
        if UIApplication.shared.isRegisteredForRemoteNotifications {
            permission(true)


        } else {
            permission(false)

        }
    }
}

并在视图中加载添加了这些行

    self.isPushPermissionGiven { (permission) in
        self.isPushEnabledFromSettings = permission
    }

    NotificationCenter.default.addObserver(forName: NSNotification.Name.UIApplicationDidBecomeActive, object: nil, queue: .main) {[weak self] (notificaiont) in
        guard let strongSelf = self  else {return }

        strongSelf.isPushPermissionGiven { (permission) in
            DispatchQueue.main.async {
                strongSelf.isPushEnabledFromSettings = permission
            }
        }
    }

现在我在设置页面中有一个开关,允许用户启用禁用推送

@objc func switchChanged (sender:UISwitch) {

    guard self.isPushEnabledFromSettings else {
        AppDelegate.sharedDelegate.navigateUesrToSettings(withMessage: "Please grant push permission from settings")
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.5, execute: {
            sender.setOn(false, animated: false)
        })
        return

    }
}



  func navigateUesrToSettings (withTitle title:String = "YourApp", withMessage message:String) {
        let alertController = UIAlertController (title: title, message: message, preferredStyle: .alert)

        let settingsAction = UIAlertAction(title: "Settings", style: .default) { (_) -> Void in
            guard let _ = URL(string: UIApplicationOpenSettingsURLString) else {
                return
            }

            self.navigate(To: UIApplicationOpenSettingsURLString)

        }
        alertController.addAction(settingsAction)
        let cancelAction = UIAlertAction(title: "Cancel", style: .default, handler: nil)
        alertController.addAction(cancelAction)

        AppDelegate.sharedDelegate.window?.rootViewController?.present(alertController, animated: true, completion: nil)
    }

希望对您有帮助:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在应用程序设置页面中更改通知的用户权限时更新 UILabel 文本值? 的相关文章

  • Swift 3 - 如何从另一个视图插入 TableView 单元格?

    我正在使用 Swift 3 Xcode 8 2 我试图弄清楚如何从选项卡式视图控制器的另一个选项卡将单元格插入到表视图中 我的表视图 class MyTableView UITableViewController var items Ite
  • 在 Alamofire 中快速发送 GET 请求中的 json 对象

    我正在尝试执行一个绑定了 json 对象的 GET 请求 这就是我生成 JSON 对象的方式 let jsonObject String AnyObject ean code type match value 16743799 然后我执行了
  • 如何避免父ScrollView裁剪内部ScrollView?

    When a horizontal child ScrollView is nested inside a vertical parent ScrollView internal element is clipped by parent S
  • 为什么快速枚举中的可选项会导致无限循环?

    评估以下代码 我希望打印一次Hello World 相反 它会导致无限循环 有人可以解释为什么吗 let array what for text String in array print Hello World 删除可选的 显然让它只打印
  • iOS 新手。预期的表达错误?

    这看起来很不寻常 因为该方法与我的 showAnswer 方法完全相同 所以我想我应该在这里问 import QuizViewController h interface QuizViewController end implementat
  • 如果您查看内部,nib 文件到底是什么样子的?

    我刚刚学习 nibs 和 swift 并对某些东西感到好奇 我知道 如果您有一个 main storyboard 文件 则首先加载根视图控制器的笔尖 然后加载该视图控制器下可能分层存在的任何视图 但是 我想知道一些事情 当他们说笔尖已 加载
  • 让约束在尺寸类别中发挥作用

    所以 我正在 Xcode 6 beta 中尝试尺寸类 我对图像设置了一些限制 使其根据 iPhone 纵向和横向对应的尺寸类别处于不同的位置 这些限制在下图中可见 正如您所看到的 当我处于紧凑 紧凑状态时 一些约束被 安装 而其他约束则没有
  • 我可以使用 NSDateFormatter 将此日期字符串转换为 NSDate 吗?

    我有这个字符串 2010 08 24T16 00 00 05 00 我想从中提取时间部分 即 16 00 并将其转换为 12 小时等效值 即下午 04 00 我正在尝试使用 NSDateFormatter 来完成此任务 但它不起作用 NSD
  • 相机叠加图片

    edit 3 好消息和坏消息 好消息是 在连接检查器中 通过断开覆盖 UIToolbar 并连接 UIImageview 我看到theKing 但是 坏消息 我没有看到我也需要的 UIToolbar 所以现在的问题是 当用户完成这里操作后
  • 在 iPhone 和 Cocos2d 中从类类型(+)方法访问对象?

    我有一个类方法 在其中创建并返回类对象 但我想访问同一类中该对象的某些属性 作为一个类方法 我无法在 h 文件中声明该变量 然后在其他方法中访问它 以下是代码 我如何在下面的实例方法中访问 backsprite 或 hudlayer 对象的
  • iPhone / iPad IOS 应用程序仪器内存计数与 task_info 内存计数

    我一直在使用 Instruments Leak Tester 它给出了大约 1 3 meg 的应用程序总分配数字 但是 当使用 task info 时 它会报告更大的内存量 例如 10 20 meg 我想我只是想确认task info正在返
  • 连接到 Apple Music

    所以我尝试使用 React Native 应用程序从 iOS 设备连接到 Apple Music 有一个 API 可以执行相同的操作 但我需要从 storekit 框架调用一个函数 提出个性化请求 苹果音乐API https develop
  • Facebook 登录 Apple CNA

    问题 是否可以设置 Facebook 登录以在 CNA 中使用 是否为开发人员提供 CNA 文档 您可以使用任何开发人员工具调试 CNA 屏幕吗 Details 我创建了一个使用电子邮件提交表单或 Facebook 登录按钮的强制门户登录页
  • 为什么 iOS 5.0 不喜欢纯窗口应用程序?为什么它要求使用视图控制器?

    我有一个使用 Xcode 4 0 的 基于窗口的应用程序 模板创建的 iOS 应用程序 当时运行良好 并且使用的是 iOS 4 3 SDK 这是一个简单地将按钮 标签等直接放置到窗口上的应用程序 没有视图控制器 什么都没有 但现在我已经升级
  • 即时将图像添加到 AR 资源以进行图像识别

    ARKit1 5介绍图像识别 在代码中 您必须创建一组参考图像 如下所示 let referenceImages ARReferenceImage referenceImages inGroupNamed AR Resources bund
  • UINavigationController 在后退按钮单击时向下滚动

    我正在开发一个带有多个导航控制器的 iPhone iPad 应用程序 当我在设备处于横向模式时单击视图的后退按钮时 前一个视图会垂直滚动到屏幕中 而不是像往常一样水平滚动 推送动画始终水平工作 正如它应该的那样 是什么导致了这个奇怪的问题
  • 使用 NSOutlineView 作为文件系统目录浏览器的 Swift 代码

    我已经在这段 Swift 代码上苦苦挣扎了一段时间 但没有发现问题 代码 下面应该提供文件目录作为 NSOutlineView 的数据源 GUI 非常简单 只是一个带有 NSOutlineView 和 OutlineViewControll
  • 您可以严格泛型类型或为一个参数指定多个类型吗?

    例如我想指定一个类型可能是Integer or String并将其用作特殊类型func我试过typealias但它不会解决这个问题 因为类型别名不能有or参数作为其唯一用途 因此请考虑下面的情况 typealias alis StringP
  • NSURLConnection 是否自动保留从服务器发送的 cookie?

    我从 ios 登录到我的龙卷风后端并发回 secure cookie 我注意到只要验证我设置的 secure cookie 我还可以请求其他信息 NSURLConnection 会保留 cookie 多久 或者关闭应用程序后 cookie
  • Swift 3 和 Xcode8 - init 的使用不明确

    在我安装 Xcode 8 并将项目转换为 Swift 3 之前 以下行没问题 现在转换后看起来像这样 let valueData Data Data bytes UnsafePointer

随机推荐

  • 如何在浏览器中录制声音?

    我需要用户在浏览器上录制他们的声音 然后自动将生成的 mp3 上传到网络服务器 我认为用户按下一个大的开始记录 停止记录按钮来执行此操作 然后 这会将文件保存在用户硬盘上 然后它会被有效地压缩并自动通过 ftp 传输到网站 是否可以使用 A
  • 有条件地通过管道传输到 Out-Null

    我正在编写一个 PowerShell 脚本msbuild一堆解决方案 我想计算有多少解决方案构建成功 有多少解决方案失败 我还想查看编译器错误 但仅限于第一个失败的错误 我假设其他错误通常也会出现类似的错误 并且我不想弄乱我的输出 我的问题
  • MySQL:“您的 SQL 语法有错误...靠近 'desc) VALUES ('Idea','Description')'”[重复]

    这个问题在这里已经有答案了 我正在尝试让 MySQL 为我的表单提交工作 当我尝试插入表时遇到问题 当我将信息放入表单并单击 提交 时 在本例中 一个字段中的信息为 想法 另一个字段中的信息为 描述 我收到以下响应 您的 SQL 语法有错误
  • 如何将 React 组件的 props 传递给样式组件

    我正在尝试根据以下内容设置样式组件的高度props它所在的 React 组件的名称 我尝试了以下方法 const Styled styled div height props gt props height class Parent ext
  • Camel-SQL 为什么使用 StreamList 似乎会加载所有 ResultSet?

    Hi 我想做什么 我目前正在开发一个 ESB 项目 apache camel spring boot 2 其中我读取了一个包含超过 100 000 000 行的 MySQL 表 我一次清空该表 1 行 转换该行并将其发送到另一个数据库 我怎
  • 如何解决使用CMAKE 3.4.1和VS2015编译带有额外模型的opencv3.0时找不到包含文件的问题

    使用 CMAKE 3 4 1 和 VS2015 构建 OPENCV 3 0 时 VS2015出现以下错误 error C2264 std tuple
  • 在子目录中安装 django

    我在 Ubuntu 14 上运行 apache2 服务器 现在我想配置 Apache 与 mod wsgi 一起使用 以便在 www abc com lab 等域的子目录上运行 Django 但我总是无法做到这一点 顺便说一下我已经成功安装
  • 交叉编译:特殊的交叉编译器还是只是带选项 -march 的 gcc?

    我需要在Linux机器上为Raspberry PI 3 编译一个程序 并且代码必须符合c 17标准 官方工具链已经过时 并且缺少 c 17 编译选项 我现在可以看到的两个解决方案是 1 gcc有一个选项 march 其描述如下 https
  • 在 HTML 中使用 SVG 绘制新月

    是否可以在 HTML 中使用 SVG 绘制新月 我一直在尝试W3学校 http www w3schools com svg 但我没有看到这样的例子 我不需要您在 新月 的典型谷歌图像中看到的任何阴影 只需一个实心边框新月 您可以绘制带有两个
  • Activity和Fragment之间如何进行回调?

    我的活动中有这个界面 public interface LogoutUser void logout 我的片段实现了这个接口 所以在我的片段中 我有这个 Override public void logout logout 在我的活动中我打
  • 解锁 xcode 文件?

    几天前 我的 Mac 出现了问题 所以我把它带到了当地一家苹果商店的 Genius 吧 他们说硬盘上的分区出现故障 必须重新格式化 我使用一个程序自动将系统备份到外部服务器 所以我不担心丢失任何东西 他们重新格式化 我已经把东西放回原位 我
  • 创建新控制器 - 运行所选代码生成器时出错

    我正在使用 Visual Studio Express 2013 for Web 特别是版本 12 0 21005 1 REL 这是我使用 VS2013 的第一个项目 到目前为止我一直在使用 VS2012 我正在尝试在我的 asp net
  • Google 视频不再能够检索字幕?

    截至 4 天前 您可以向以下地址发送 GET 请求或访问并接收包含给定 YouTube 视频的字幕轨道的 xml 响应 有谁知道此支持是否已被删除 因为从今晚开始 它不再提供带有字幕的 xml 响应 每个视频的页面都是空的 有许多视频在 4
  • 如何在 jasmine 测试中模拟导出的打字稿函数?

    我正在尝试在 Jasmine 测试中模拟从打字稿文件导出的函数 我希望以下内容能够模拟导入的foo并返回 bar 规范中的值 1 模拟似乎没有被调用 所以我显然错过了一些东西 我该如何修复这个例子 demo ts export functi
  • MySQL Workbench 编辑表数据是只读的

    当尝试在 MySQL Workbench 5 2 37 中编辑表数据时 其处于只读模式 仅当表具有主键时才可编辑 是否有任何修复来处理没有主键的表 作为建议之一 我尝试升级 WB 5 2 40 但这个问题仍然存在 我假设该表有一个主键 首先
  • Angular:指令中的 updateValueAndValidity

    我有一个指令 如果输入值是整数 则在模糊时附加小数 下面是实现 import Directive ElementRef Input OnInit HostListener forwardRef from angular core impor
  • 如何创建无限循环

    好的 我需要在倒计时创建一个无限循环 我的代码是 public void countdown if x null x cancel x new CountDownTimer 20000 1000 public void onTick lon
  • 在Python中使用模糊匹配合并多列上的数据帧

    我有两个示例数据框 如下所示 df1 pd DataFrame Name 0 John 1 Bob 2 Shiela Degree 0 Masters 1 Graduate 2 Graduate Age 0 27 1 23 2 21 df2
  • 如何在 Oreo (8.0) 中使用隐式广播 PACKAGE_ADDED?

    我必须接收系统发送的隐式广播 ACTION PACKAGE ADDED 来检测应用程序的安装并执行一些代码 我使用了下面的代码 public class Receiver extends BroadcastReceiver Override
  • 在应用程序设置页面中更改通知的用户权限时更新 UILabel 文本值?

    在我的场景中 用户将收到在应用程序中接收通知的警报 如果用户单击 不允许 UILabel 将更新为 未启用 如果用户想要更改通知 用户将被导航到应用程序设置页面以更改通知权限状态 func checkNotificationPermissi