简体   繁体   English

Swift-从DetailViewController访问UITextView

[英]Swift - Accesing UITextView from DetailViewController

I have been working on a new app recently, and I have been having this wierd problem. 我最近一直在开发一个新的应用程序,并且遇到了这个奇怪的问题。 Everytime I try and access my textviews.text property outside of viewdidload I get the error "Instance member 'detailDescriptionLabel' (my textview) cannot be used on type 'DetailViewController'(the class I am in)" I would really apreciate your help. 每当我尝试在viewdidload之外访问我的textviews.text属性时,都会收到错误消息“实例成员'detailDescriptionLabel'(我的textview)不能用于'DetailViewController'类型(我所在的类)”,我真的很感谢您的帮助。 Thanks. 谢谢。

The code where the error comes up: 错误出现的代码:

var updated: String = detailDescriptionLabel.text {
    didSet {

        if updated != oldValue {
            textFieldDidChange()
        }

    }
}

The whole entire class, which controls the cells on a table (just incase): 整个类,用于控制表中的单元格(以防万一):

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
}
var myString: String {
    didSet {
        if newValue  != oldValue {
            //what ever you wanna do here.
        }
    }
}

Try this code. 试试这个代码。 There is also a "newValue" that can used. 还有一个可以使用的“ newValue”。

Like I said, use this code to update when ever UITextView.text changes text. 就像我说的,当UITextView.text更改文本时,请使用此代码进行更新。

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

似乎不允许以这种方式设置成员变量...您将需要实现textViewDidChange委托方法

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM