2016-06-21 17 views
0

Ich habe vor kurzem an einer neuen App gearbeitet, und ich habe dieses seltsame Problem gehabt. Jedes Mal, wenn ich versuche, auf meine textviews.text -Eigenschaft außerhalb von viewdidload zuzugreifen, erhalte ich den Fehler "Instanzmitglied 'detailDescriptionLabel' (meine Textansicht) kann nicht vom Typ 'DetailViewController' (der Klasse, in der ich mich befinde) verwendet werden" Ich würde Ihre Hilfe wirklich schätzen. Vielen Dank.Swift - Zugriff auf UITextView von DetailViewController

Der Code, wo der Fehler kommt:

var updated: String = detailDescriptionLabel.text { 
    didSet { 

     if updated != oldValue { 
      textFieldDidChange() 
     } 

    } 
} 

Die ganze ganze Klasse, die die Zellen auf einem Tisch steuert (nur für den Fall):

var start : CGPoint? 

var red : CGFloat = 0.0 
var green : CGFloat = 0.0 
var blue : CGFloat = 0.0 


@IBAction func erase(sender: AnyObject) { 
    red = 1 
    green = 1 
    blue = 1 
} 

@IBAction func clear(sender: AnyObject) { 
    self.imageView.image = nil 
} 


@IBAction func blackPen(sender: AnyObject) { 
    red = 0 
    green = 0 
    blue = 0 
} 

@IBAction func redPen(sender: AnyObject) { 
    red = 1 
    green = 0 
    blue = 0 
} 

@IBAction func bluePen(sender: AnyObject) { 
    red = 0 
    green = 0 
    blue = 1 
} 

@IBOutlet weak var detailDescriptionLabel: UITextView! 

@IBOutlet weak var imageView: UIImageView! 

let notes = PFObject(className: "Notes") 



var detailItem: AnyObject? { 
    didSet { 
     // Update the view. 
     self.configureView() 
    } 
} 

func configureView() { 

} 


override func viewDidLoad() { 

    super.viewDidLoad() 


    // Do any additional setup after loading the view, typically from a nib. 
    self.configureView() 

} 




var updated: String = detailDescriptionLabel.text { 
    didSet { 
     if updated != oldValue { 
      textFieldDidChange() 
     } 

    } 
} 


func textFieldDidChange() { 
    let query = PFQuery(className: "Notes") 
    query.getObjectInBackgroundWithId("Content") { (notes, error) -> Void in 

     notes!["Content"] = self.detailDescriptionLabel.text 
     print("Updated") 


    } 
} 


override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { 
    let newText = change![NSKeyValueChangeNewKey] as! String 
    print(newText) 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


func draw(start : CGPoint, end: CGPoint) { 
    UIGraphicsBeginImageContext(self.imageView.frame.size) 
    let context = UIGraphicsGetCurrentContext() 
    imageView?.image?.drawInRect(CGRect(x: 0, y: 0, width: imageView.frame.width, height: imageView.frame.height)) 
    CGContextSetLineWidth(context, 6) 
    CGContextBeginPath(context) 
    //Define starting point 
    CGContextMoveToPoint(context, start.x, start.y) 
    //Define end point 
    CGContextAddLineToPoint(context, end.x, end.y) 
    //Close the path between the starting and ending point (draw) 
    CGContextSetRGBStrokeColor(context, red, green, blue, 1) 
    CGContextStrokePath(context) 
    let newImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    imageView.image = newImage 
} 

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    let Touch = touches.first as UITouch! 
    start = Touch.locationInView(self.imageView) 
} 

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    let Touch = touches.first as UITouch? 
    let end = Touch?.locationInView(self.imageView) 
    if let s = self.start { 
     draw(s, end: end!) 
    } 
    self.start = end 
} 

Antwort

0
var myString: String { 
    didSet { 
     if newValue != oldValue { 
      //what ever you wanna do here. 
     } 
    } 
} 

diesen Code Versuchen. Es gibt auch einen "newValue", der verwendet werden kann.

Wie gesagt, verwenden Sie diesen Code, um zu aktualisieren, wann auch immer UITextView.text den Text ändert.

func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool { 
    myString = (textView.text+text) 
    return true 
} 
+0

Das Problem weiterhin besteht nach wie vor, dass, wenn ich detailDescriptionLabel.text außerhalb viewDidLoad, den Fehler erwähnen kommt hoch. Trotzdem danke. –

+1

Kann ich etwas mehr von Ihrem Code sehen, wie die "detailDescriptionLabel" -Deklaration, die Klassendeklaration usw. – Lazy

+0

Ich habe die ganze Klasse in meiner Frage oben hinzugefügt. Vielen Dank. –

0

Es scheint eine Membervariable auf diese Weise Einstellung ist nicht erlaubt ... müssen Sie die textViewDidChange Delegatmethode implementieren