更新 UILabel 文本值,在应用程序设置页面更改用户通知权限时?
Update UILabel text value , when changing the user permission for notification in application setting page?
在我的场景中,用户将收到有关在应用程序中接收通知的警报。如果用户单击 "Don't Allow",UILabel 将更新为 "Not enabled"。如果用户想要更改通知,用户将被导航到应用程序设置页面以更改通知权限状态。
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()
更新 ViewDidAppear()
方法中的 UILabel 值,我在 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)
}
希望对您有所帮助:)
在我的场景中,用户将收到有关在应用程序中接收通知的警报。如果用户单击 "Don't Allow",UILabel 将更新为 "Not enabled"。如果用户想要更改通知,用户将被导航到应用程序设置页面以更改通知权限状态。
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()
更新 ViewDidAppear()
方法中的 UILabel 值,我在 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)
}
希望对您有所帮助:)