zoukankan      html  css  js  c++  java
  • Swift 添加KVO

         
    1.添加监听
       lab1.addObserver(self, forKeyPath: "text", options: [.new, .old], context: nil)
    
    
    
    2. 监听
        override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
            if let old = change?[NSKeyValueChangeKey.oldKey] {
              print("old = (old)") //
            }
                  
            if let new = change?[NSKeyValueChangeKey.newKey] {
              print("new = (new)") // Albert
            }
        }
    
    
    3.移除KVO
        deinit {
            lab1.removeObserver(self, forKeyPath: "text")
        }

    2.添加多个KVO

           lab1.addObserver(self, forKeyPath: "text", options: [.new, .old], context: nil)
            lab1.addObserver(self, forKeyPath: "frame", options: .new, context: nil)
    
    
    
        override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
            if keyPath == "text"{
                print("text改变")
            }else{
                print("frame 改变")
            }
            if let old = change?[NSKeyValueChangeKey.oldKey] {
              print("old = (old)") //
            }
                  
            if let new = change?[NSKeyValueChangeKey.newKey] {
              print("new = (new)") // Albert
            }
        }
    
        deinit {
            lab1.removeObserver(self, forKeyPath: "text")
            lab1.removeObserver(self, forKeyPath: "frame")
        }
    

      

    3. 两个label 都监听了 text, frame

            lab1.addObserver(self, forKeyPath: "text", options: [.new, .old], context: nil)
            lab1.addObserver(self, forKeyPath: "frame", options: .new, context: nil)
            
            lab2.addObserver(self, forKeyPath: "text", options: [.new, .old], context: nil)
            lab2.addObserver(self, forKeyPath: "frame", options: .new, context: nil)
    
    
    
    
        override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
            if lab1.isEqual(object){
                print("lab1 改变")
                if keyPath == "text"{
                    print("lab1 text改变")
                    if let old = change?[NSKeyValueChangeKey.oldKey] {
                        print("old = (old)") //
                      }
                            
                      if let new = change?[NSKeyValueChangeKey.newKey] {
                        print("new = (new)") // Albert
                      }
                }else{
                    print("lab1 frame 改变")
                    if let old = change?[NSKeyValueChangeKey.oldKey] {
                        print("old = (old)") //
                      }
                            
                      if let new = change?[NSKeyValueChangeKey.newKey] {
                        print("new = (new)") // Albert
                      }
                }
            }else{
                
                print("lab2 改变")
                if keyPath == "text"{
                    print("lab2 text改变")
                }else{
                    print("lab2 frame 改变")
                }
            }
        }
    
    
    
        deinit {
            lab1.removeObserver(self, forKeyPath: "text")
            lab1.removeObserver(self, forKeyPath: "frame")
            lab2.removeObserver(self, forKeyPath: "text")
            lab2.removeObserver(self, forKeyPath: "frame")
        }
    

      

  • 相关阅读:
    cnpm与npm指定有什么区别?
    Node.js与VUE安装及环境配置之Windows篇
    kafka和rabbitmq对比
    .NET笔记题库(一)
    API网关的用处
    C#问答题与附解收集(三)
    Error Code: 1175
    有时间测试dism
    sublime 3103liense
    weblogic 安装和部署项目(原创)
  • 原文地址:https://www.cnblogs.com/qingzZ/p/13746082.html
Copyright © 2011-2022 走看看