Swift 视图加载前的观察者
Swift observer before view loaded
我正在使用 SWReveal 创建滑动菜单。
当应用程序加载时,它会显示一个主页,其中包含指向应用程序中其他页面的按钮。按下按钮后,将执行 segue 并更新菜单,突出显示新选择的页面,以便下次拉出菜单时,它指示用户当前所在的页面。
我正在使用观察者来更新菜单,如下所示。加载滑动菜单后,代码可以正常工作,然后按下按钮。
但是,由于尚未创建滑动菜单观察器,首次加载主页时它无法正常工作。
我的问题:是否有一种方法可以在主页加载后初始化滑动菜单,以便创建观察者?还是有一种我没有看到的方法来解决这个问题?
swipeMenu.swift(接收通知):
override func viewDidLoad(){
NotificationCenter.default.addObserver(self, selector: #selector(self.changeGiveaway(notification:)), name: Notification.Name("changeGiveaway"), object: nil)
}
func changeGiveaway(notification: Notification){
print("Change giveway was called")
homeShadow.isHidden = true
yanaLiveVideoShadow.isHidden = true
yanaChatShadow.isHidden = true
yanaShopShadow.isHidden = true
yanaProfileShadow.isHidden = true
horoscopesShadow.isHidden = true
fortuneTellerShadow.isHidden = true
dailyGiveAwayShadow.isHidden = false
}
home.swift(Post通知):
@IBAction func dailyGiveAway(_ sender: Any) {
NotificationCenter.default.post(name: Notification.Name("changeGiveaway"), object: nil)
performSegue(withIdentifier: "giveAway", sender: self)
}
这里最好的方法可能是使用委托。
您可以创建:
protocol GiveAwayDelegate: class {
func changeGiveAway()
}
var delegate: GiveAwayDelegate?
@IBAction func dailyGiveAway(_ sender: Any) {
self.delegate?.changeGiveAway()
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destination = segue.destination as? DestinationViewController {
destination.delegate = self
}
}
最后在你的 ViewController:
class ViewController: UIViewController, GiveAwayDelegate {
func changeGiveaway(notification: Notification){
print("Change giveway was called")
...
}
}
我正在使用 SWReveal 创建滑动菜单。
当应用程序加载时,它会显示一个主页,其中包含指向应用程序中其他页面的按钮。按下按钮后,将执行 segue 并更新菜单,突出显示新选择的页面,以便下次拉出菜单时,它指示用户当前所在的页面。
我正在使用观察者来更新菜单,如下所示。加载滑动菜单后,代码可以正常工作,然后按下按钮。
但是,由于尚未创建滑动菜单观察器,首次加载主页时它无法正常工作。
我的问题:是否有一种方法可以在主页加载后初始化滑动菜单,以便创建观察者?还是有一种我没有看到的方法来解决这个问题?
swipeMenu.swift(接收通知):
override func viewDidLoad(){
NotificationCenter.default.addObserver(self, selector: #selector(self.changeGiveaway(notification:)), name: Notification.Name("changeGiveaway"), object: nil)
}
func changeGiveaway(notification: Notification){
print("Change giveway was called")
homeShadow.isHidden = true
yanaLiveVideoShadow.isHidden = true
yanaChatShadow.isHidden = true
yanaShopShadow.isHidden = true
yanaProfileShadow.isHidden = true
horoscopesShadow.isHidden = true
fortuneTellerShadow.isHidden = true
dailyGiveAwayShadow.isHidden = false
}
home.swift(Post通知):
@IBAction func dailyGiveAway(_ sender: Any) {
NotificationCenter.default.post(name: Notification.Name("changeGiveaway"), object: nil)
performSegue(withIdentifier: "giveAway", sender: self)
}
这里最好的方法可能是使用委托。
您可以创建:
protocol GiveAwayDelegate: class {
func changeGiveAway()
}
var delegate: GiveAwayDelegate?
@IBAction func dailyGiveAway(_ sender: Any) {
self.delegate?.changeGiveAway()
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destination = segue.destination as? DestinationViewController {
destination.delegate = self
}
}
最后在你的 ViewController:
class ViewController: UIViewController, GiveAwayDelegate {
func changeGiveaway(notification: Notification){
print("Change giveway was called")
...
}
}