如何从另一个类调用函数

时间:2018-06-09 18:25:18

标签: swift xlpagertabstrip

在我的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)wichi在helper / extension + UIViewController

2 个答案:

答案 0 :(得分:1)

终于找到了解决方案,我应该使用NotificationCenter

所以,我在setupBarButtonMenu扩展名中创建了一个名为UIViewController的函数,我想做的只是从ChildViewController在ParentViewController中调用它。 我在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)

答案 1 :(得分:0)

这可能是一个微不足道的答案,但有时最简单的答案是最好的:

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语句,以便我可以看到它何时是调用。希望这有帮助。