Как вызвать объект внутри TableViewCell в Swift? - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь использовать OneSignal IOS Native SDK для своего приложения.Я включил OSPermissionObserver and OSSubscriptionObserver в классе.Требуется добавить заглушки протоколов и внутри протоколов, мне нужно вызвать allowNotificationSwitch в коде.Но я не знаю, как мне это сделать.

Вот так выглядит мой TableViewCell.MenuCell В indexPath.row = 0 имеется Switch объект.Я сделал это программно, так как indexPath.row 0 имеет только объект переключения.Я использовал приведенные ниже коды для создания переключателя внутри cellRowAt и создал функцию switchChanged.Проблема в том, как я могу вызвать allowNotificationSwitch внутри протоколов OSPermissionObserver и OSSubscriptionObserver?Я закомментировал ту часть, где я назову allowNotificationSwitch.Надеюсь, я собирался объяснить таким образом, чтобы вы могли понять.Надеюсь на вашу помощь.Большое спасибо.

AllowNotificationSwitch

 if indexPath.row == 0 {
            let allowNotificationSwitch = UISwitch(frame: .zero)
            allowNotificationSwitch.setOn(false, animated: true)
            allowNotificationSwitch.tag = indexPath.row
            allowNotificationSwitch.addTarget(self, action: #selector(self.switchChanged(_:)), for: .valueChanged)
            cell.accessoryView = allowNotificationSwitch
        }

 @objc func switchChanged(_ sender : UISwitch!) {

    let status: OSPermissionSubscriptionState = OneSignal.getPermissionSubscriptionState()
    let isSubscribed = status.subscriptionStatus.subscribed

    if isSubscribed == true {
        sender.isOn = true
        sender.isUserInteractionEnabled = true
    }

    OneSignal.add(self as OSPermissionObserver)
    OneSignal.add(self as OSSubscriptionObserver)

    if !sender.isOn {
        OneSignal.setSubscription(false)
    } else {
        OneSignal.setSubscription(true)
    }

    print("table row switch change \(sender.tag)")
    print("the switch is \(sender.isOn ? "ON" : "OFF")")
}

Протоколы OSPermissionObserver и OSSubscriptionObserver (на основе документации OneSignal)

 func onOSPermissionChanged(_ stateChanges: OSPermissionStateChanges!) {
    if stateChanges.from.status == OSNotificationPermission.notDetermined {
        if stateChanges.to.status == OSNotificationPermission.authorized {
           // allowNotificationsSwitch.isUserInteractionEnabled = true
        } else if stateChanges.to.status == OSNotificationPermission.denied {
            displaySettingsNotification()
        }
    } else if stateChanges.to.status == OSNotificationPermission.denied { // DENIED = NOT SUBSCRIBED
      //  allowNotificationsSwitch.isUserInteractionEnabled = false
    }
}

func onOSSubscriptionChanged(_ stateChanges: OSSubscriptionStateChanges!) {
    if stateChanges.from.subscribed && !stateChanges.to.subscribed { // NOT SUBSCRIBED != DENIED
       // allowNotificationsSwitch.isOn = false
    } else if !stateChanges.from.subscribed && stateChanges.to.subscribed {
       // allowNotificationsSwitch.isOn = true
       // allowNotificationsSwitch.isUserInteractionEnabled = true
    }
}
...