如何从另一个调用函数 class
How to call a function from another class
在我的 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
这可能是一个微不足道的答案,但有时最简单的答案是最好的:
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 继承了它,所以它可以在其中访问,当我 运行 你的应用程序被调用时,我已经尝试了它,我已经在你的函数中添加了打印语句,以便我可以看到它何时被调用。希望这对您有所帮助。
终于找到解决办法了,我应该用NotificationCenter
所以,我在 UIViewController
扩展中创建了一个名为 setupBarButtonMenu
的函数,我想做的只是在 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)
在我的 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
这可能是一个微不足道的答案,但有时最简单的答案是最好的:
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 继承了它,所以它可以在其中访问,当我 运行 你的应用程序被调用时,我已经尝试了它,我已经在你的函数中添加了打印语句,以便我可以看到它何时被调用。希望这对您有所帮助。
终于找到解决办法了,我应该用NotificationCenter
所以,我在 UIViewController
扩展中创建了一个名为 setupBarButtonMenu
的函数,我想做的只是在 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)