视图加载前的 Swift 观察者
Posted
技术标签:
【中文标题】视图加载前的 Swift 观察者【英文标题】:Swift observer before view loaded 【发布时间】:2017-10-20 08:57:42 【问题描述】:我正在使用 SWReveal 创建一个滑出菜单。
当应用加载时,它会显示一个主页,其中包含指向应用中其他页面的按钮。按下按钮后,将执行 a 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(发布通知):
@IBAction func dailyGiveAway(_ sender: Any)
NotificationCenter.default.post(name: Notification.Name("changeGiveaway"), object: nil)
performSegue(withIdentifier: "giveAway", sender: self)
【问题讨论】:
【参考方案1】:这里最好的方法可能是使用委托。
您可以创建:
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")
...
【讨论】:
以上是关于视图加载前的 Swift 观察者的主要内容,如果未能解决你的问题,请参考以下文章
Swift viewcontroller firebase 数据库观察者重复调用
文件上传进度的通知观察者模式仅在文件很大时才有效 - swift?
如何初始加载 UITableView 然后观察 Firebase 节点以更改在 Swift 中刷新 tableview?