Как вызвать функцию из другого класса - PullRequest
0 голосов
/ 09 июня 2018

В моем rootviewcontroller у меня есть три вкладки под меню навигации, и каждая вкладка представляет список продуктов, в меню навигации у меня есть значок корзины с номером, чтобы показать количество значков в корзине.каждая вкладка является отдельной viewcontroller, и все они ссылаются на rootviewcontroller следующим образом:

override func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] {
    let layout = UICollectionViewFlowLayout()
    let firstTab = FirstTabController(collectionViewLayout: layout)
    let seccondTab = SeccondTabController(collectionViewLayout: layout)
    let thirdTab = ThirdTabController(collectionViewLayout: layout)

    return [firstTab ,seccondTab ,thirdTab ]
}

Я создал функцию в defaultviewcontroller для сброса номера корзины в навигационном меню, но я незнаю, как запустить эту функцию из firsttabController

Это моя функция в firsttabcontroller

func AddToCart(sender:UIButton) {
    let activityIndicatorView = NVActivityIndicatorView(frame: self.view.frame, type: .circleStrokeSpin, color: .red, padding: 170)
    self.view.addSubview(activityIndicatorView)
    activityIndicatorView.startAnimating()

    let parameters : [String: Any] = [
        "productid": sender.tag ,
        "quantityid": 1
    ]

    ApiServiceCart.sharedInstance.addProductToCartCatalog(parameters: parameters) { (success) in
        activityIndicatorView.removeFromSuperview()
        if success == true {
            // here i want to fire DefaultController().setupNavigationMenu()
            self.displayMessage(Title: MessageTitle.Successfull.rawValue, Message: Message.AddToCart_Successfull.rawValue)
        }
        else {
            self.displayMessage(Title: MessageTitle.Error.rawValue, Message: Message.AddToCart_Error.rawValue)
        }
    }
}

Я пытался делегировать протокол, но он не работал

github.com / kavehnaseri / Protino / blob / master / Protino.функция, которую я хочу вызвать из контроллера по умолчанию - (setupNavBarButtonsWithCartOnLeft), которая находится в помощнике / расширении + UIViewController

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Наконец-то нашел решение, я должен был использовать NotificationCenter

Итак, у меня была функция с именем setupBarButtonMenu, созданная в расширении UIViewController, и я хотел просто вызвать ее вParentViewController из ChildViewController.я добавил наблюдателя в ParentViewController, как это:

override func viewDidLoad() {
    super.viewDidLoad()
    NotificationCenter.default.addObserver(self, selector: #selector(self.setupNavBarButtonsWithCartOnLeft), name: NSNotification.Name(rawValue: "CartChanged"), object: nil)
}

, и в другой функции отовсюду я могу запустить функцию следующим образом:

NotificationCenter.default.post(name: NSNotification.Name(rawValue: "CartChanged"), object: nil)
0 голосов
/ 09 июня 2018

Это может быть тривиальный ответ, но иногда самые простые из них являются лучшими:

override func viewDidLoad() {
    super.viewDidLoad()

    view.backgroundColor = UIColor.myRed
    //THE LINE BELOW EXECUTES JUST FINE
    setupNavBarButtonsWithCartOnLeft()

    fetchProducts(pageSize: numberOfItemsPerSection, pageNumber: numberOfItemsPerSection / 9) // 9 - 1
    setupCollectionView()
}

, поскольку ваша функция является расширением UIViewController и UICollectionViewController наследует ее, она доступна там, просто попробуйте, когдаЯ запустил ваше приложение, оно называлось. Я поместил оператор print в вашу функцию, чтобы я мог видеть, когда оно вызывается.Надеюсь, это помогло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...