counter
स्मार्टक्यूए का लोगो

Can't change UIView attributes in the parent class / viewcontroller?

"can't change uiview attributes in the parent class / viewcontroller?" के लिए कोड उत्तर. हमें मिल 1 कोड उदाहरण पर स्मार्टक्यूए नीचे ios श्रेणी।

आपको जो समाधान चाहिए वह खोजें!

हम 50 से अधिक भाषाओं के सामान्य प्रोग्रामिंग मुद्दों के लिए समाधान प्रदान करते हैं, आशा है कि इससे मदद मिलेगी!

उदाहरण #1

द्वारा sergio 1👍
private var myContext = 0

class MyModel : NSObject {

  dynamic var buttonTitle : String = "default title"
}

class MyChildVC : UIViewController {

  let model : MyModel
  @IBOutlet var button : UIButton?

  init(m : MyModel) {
    model = m
    super.init(nibName: nil, bundle: nil)
  }

  required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
  }

  override func viewDidLoad() {
    super.viewDidLoad()

    self.model.addObserver(self, forKeyPath: "buttonTitle", options: .New, context: &myContext)

  }

  deinit {
    self.model.removeObserver(self, forKeyPath: "buttonTitle", context: &myContext)
  }

  override func observeValueForKeyPath(keyPath: String?,
    ofObject object: AnyObject?,
    change: [String : AnyObject]?,
    context: UnsafeMutablePointer<Void>) {

        if (keyPath == "buttonTitle") {
            button?.titleLabel?.text = self.model.buttonTitle
        }
  }

}


class MyParentVC : UIViewController {

  let model = MyModel()
  let vc1 : MyChildVC

  init() {
    self.vc1 = MyChildVC(m: model)
    super.init(nibName: nil, bundle: nil)

  }

  func someOp() {

    self.model.buttonTitle = "NewTitle"
  }

  required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
  }
}
प्रश्न और उत्तर स्टैक ओवरफ़्लो से एकत्र किए जाते हैं, cc by-sa 2.5, cc by-sa 3.0 और cc by-sa 4.0 के तहत लाइसेंस प्राप्त होते हैं।

समान प्रश्न