Tag: 观察员

Swift – 更改UNnotification徽章号码

我试图听取IconBadgeNumber的更改。 在我的Appdelegate中我有: extension AppDelegate: UNUserNotificationCenterDelegate { func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { completionHandler([.alert, .badge]) } } 并在我的控制器中: override func viewDidLoad() { super.viewDidLoad() UIApplication.shared.addObserver(self, forKeyPath: "applicationIconBadgeNumber", options: .new, context: nil) } @objc override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { deliveredNotif […]

iOS – NotificationCenter addObserver“UIMenuControllerWillHideMenu”

我已经为UIMenuControllerWillHideMenu添加了通知观察者,但是它不会调用添加/关联通知中心的select器。 UIMenuControllerWillHideMenu是UIMenuControllerWillHideMenu的通知中心标识符,应该在UIMenuController隐藏时UIMenuController 。 但不知何故,这是行不通的。 这里是我试过的代码(Swift 3.x): private func addMenuObserverNotification(){ NotificationCenter.default.addObserver(self, selector: #selector(self.menuControllerWillHideMenu), name: NSNotification.Name(rawValue: "UIMenuControllerWillHideMenu"), object: nil) } // This function should be called on 'UIMenuControllerWillHideMenu' func menuControllerWillHideMenu() -> Void { removeMenuObserverNotification() } private func removeMenuObserverNotification(){ NotificationCenter.default.removeObserver(self) } 无法识别,什么是错的。

如何使用string参数创buildselect器

大家好! 我正在编写一个使用Swift 3.1和Xcode 8.3.3的程序。 我想创build一个类,负责在键盘出现和消失时移动整个视图。 但是我在使用string参数创build自定义select器时遇到了困难。 要显示或隐藏键盘,我们需要function: func keyboardWillShow(notification: Notification) { //Code moving view when keyboard appears } 我想创build一个这样的select器: let selector = Selector(("keyboardWillShow") NotificationCenter.default.addObserver(view, selector: selector, name: .UIKeyboardWillShow, object: anyView.view.window) 它正在编译,但当键盘出现时,它崩溃。 因为它是独立的class级我不能使用这个build筑: #selector(keyboardWillShow) 因为它将Swift函数转换为Objective-C函数(添加@objc)。 所以问题是:如何创build一个select器forms的参数string? 感谢您的任何帮助! PS我可以把整个代码在那里,但我不想问题是非常大的,所以我会编辑的问题,如果有人问…

Firebase:何时在swift中调用removeObserverWithHandle

文档说你需要调用observeEventType:withBlock去除观察者,如果你不再需要它。 我在ViewDidDisAppear看过样本。 我也发现一些Obj-C代码在deinit调用了这个方法,这在Swift中是不需要的。 然而,在我的简单应用程序中,只要我在应用程序中,我想要同步数据。 如果是这种情况,我是否必须调用observeEventType:withBlock ? 我检查了Firebase网站上的Chat-Swift示例代码,但未findobserveEventType:withBlock 。 这是否意味着不要调用observeEventType:withBlock 如果我希望观察者在应用程序正在使用时开启? 谢谢。 UPDATE 感谢Jay和David。 我发现在ViewWillAppear中观察并在ViewDidDisappear中删除它是有意义的。 但是,我正在使用observeEventType来监视节点的任何值更改,并会更新UI(如果有)。 如果我把它放在ViewWillAppear中: override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) ref.observeEventType(.Value, withBlock: { snap in { // **update UI if there is any Value change** }) } 把它放在viewWillAppear的问题是,每次出现视图时都会调用它,而不pipe值是否改变。 因此,下载快照,每当我返回到视图时,我的用户界面都会刷新。 这变得适得其反。 我也尝试了ChildAdded / ChildRemoved ,但是,它只返回最后一个节点,而不是从我的ref的path: 例如,如果我添加到ref / child1 / ChildAdded / child3 /值, ChildAdded只会返回child3 […]

Swift NSNotificationCenter?

我试图让UITextViewTextDidChangeNotification工作。 我是使用NSNotificationCenter的新手,所以我很难理解到底发生了什么。 我在故事板中有一个UITextView,并且在ViewController类中为它创build了一个IBOutlet,并将其命名为textView。 这是我的viewDidLoad函数: override func viewDidLoad() { super.viewDidLoad() origin = self.view.frame.origin.y if let field = textView{ field.placeholder = placeholder field.layer.cornerRadius = 8 field.layer.borderWidth = 0.5 field.layer.borderColor = UIColor.grayColor().CGColor NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyPressed:"), name:UITextFieldTextDidChangeNotification, object: nil); } NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name:UIKeyboardWillShowNotification, object: nil); NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name:UIKeyboardWillHideNotification, object: nil); } 键盘通知很好用。 据我了解,他们调用与select器相同的名称的函数。 那是对的吗? 还是有更多的事情在这里? 我做了一个叫做keyPressed的函数,它把一个NSNotification作为参数,但是这个函数从来没有被调用,而当我使用键盘的时候,keyboardWillShow和keyboardWillHide函数被调用。 有人可以解释发生了什么事吗?