NelbeDG
NelbeDG

Reputation: 445

Show a button on another controller

I have two controller, one controller is controllerOne.swift, in this I receive notifications and I need when one notification arrive, show a button on controllerTwo.swift.

My code is:

ControllerOne.swift

public func websocket(token: Any){
        self.ws.open("ws://"+String(APIHOST)+":"+String(port)+"/ws?token="+String(describing: token))
        self.ws.event.message = { message in
            let res = self.convertToDictionary(text: message as! String)

            if ((res!["notification"]) != nil) {
                self.count_total_notifications_ws = self.count_total_notifications_ws! + 1
                let presentView = UIApplication.shared.keyWindow?.rootViewController?.presentedViewController as? SWRevealViewController

                let tabbarController = presentView?.frontViewController as? UITabBarController

                if (tabbarController?.selectedIndex != 0) {
                    tabbarController?.tabBar.items?[0].badgeValue = self.count_total_notifications_ws?.description
                }else{
                    //Here I need to show a showNotificationsbtn button
                }
            }
        }
    }

ControllerTwo.swift

class NewDashboardViewController: UIViewController, UITableViewDataSource, UITabBarControllerDelegate, UITableViewDelegate {

    //This is the button that I need show
    @IBOutlet weak var showNotificationsbtn: UIButton!  

    @IBAction func showNotifications(_ sender: Any) {true
        self.viewDidAppear(true)
        showNotificationsbtn.isHidden = true
    }

}

Someone know how to I can do? Thanks for your help.

Upvotes: 2

Views: 68

Answers (2)

Bilal Awan
Bilal Awan

Reputation: 5370

First hide your button. Now to unhide that button,you have multiple options. 1. Use delgate/protocol for communicating between viewcontrollers 2. You may add an observer

Upvotes: 0

ami rt
ami rt

Reputation: 933

In ViewControllerOne

  if ((res!["notification"]) != nil) {
                self.count_total_notifications_ws = self.count_total_notifications_ws! + 1
                let presentView = UIApplication.shared.keyWindow?.rootViewController?.presentedViewController as? SWRevealViewController

                let tabbarController = presentView?.frontViewController as? UITabBarController

                if (tabbarController?.selectedIndex != 0) {
                    tabbarController?.tabBar.items?[0].badgeValue = self.count_total_notifications_ws?.description
                }else{
                    //Here I need to show a showNotificationsbtn button
                NotificationCenter.default.post(name: NSNotification.Name(rawValue: "remoNotificationArrived"), object: nil, userInfo: nil )
                }
            }

In ViewControllerTwo

     override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(true)
            DispatchQueue.main.async {

                NotificationCenter.default.addObserver(self, selector: #selector(self.showButton), name: NSNotification.Name(rawValue: "remoNotificationArrived"), object: nil)

            }
    }

  func showButton(){
       showNotificationsbtn.isHidden = false
    }

Upvotes: 2

Related Questions