将String填充到textView

时间:2016-01-09 04:36:56

标签: textview swift2

uploaded video (7 sec) for describing my problem

我在tableView单元格中嵌入了一个textView,当我们在textView输入内容时,textview会根据输入的内容自动增加其高度,并且单元格也会增加其大小以便使用此方法执行此操作: -

//tableViewCell

/// Custom setter so we can initialise the height of the text view
var textString: String {
    get {
        return textView?.text ?? ""
    }
    set {
        if let textView = textView {
            textView.text = newValue

            textViewDidChange(textView)
        }
    }
}



    override func awakeFromNib() {
    super.awakeFromNib()



    // Disable scrolling inside the text view so we enlarge to fitted size
    textView?.scrollEnabled = false
    textView?.delegate = self



}

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    if selected {
        textView?.becomeFirstResponder()
    } else {
        textView?.resignFirstResponder()
    }
}
}

  extension MultiLineTextInputTableViewCell: UITextViewDelegate {
 func textViewDidChange(textView: UITextView) {

    let size = textView.bounds.size
    let newSize = textView.sizeThatFits(CGSize(width: size.width, height: CGFloat.max))

    // Resize the cell only when cell's size is changed
    if size.height != newSize.height {
        UIView.setAnimationsEnabled(false)
        tableView?.beginUpdates()
        tableView?.endUpdates()
        UIView.setAnimationsEnabled(true)

        if let thisIndexPath = tableView?.indexPathForCell(self) {
            tableView?.scrollToRowAtIndexPath(thisIndexPath, atScrollPosition: .Bottom, animated: false)
        }
    }
}

这里一切都很好,但我添加了一个转发任何内容的功能,并使用这种方法: -

 forwardNoteAction = UITableViewRowAction(style: .Normal, title: "Forward"){ action, index in
            let cell = tableView.cellForRowAtIndexPath(indexPath) as! NotesTableViewCell

                if self.searchBar.text == "" {


                    let object: PFObject = self.noteObjects.objectAtIndex(indexPath.row) as! PFObject
                    let postsObjID = object.objectId!
                    let query = PFQuery(className: "Notes")
                    query.fromLocalDatastore()

                    query.getObjectInBackgroundWithId(postsObjID) {
                        (objectViewes, error) -> Void in
                        if error != nil {
                            print(error)
                        } else {


                            self.forwardObject = object
                            print(self.forwardObject)
                            //object.pinInBackground()

                self.performSegueWithIdentifier("forwardNoteSegue", sender: nil)
                self.tableView.deselectRowAtIndexPath(indexPath, animated: true)


                        }

我正在将内容放入变量self.forwardObject并在传递forwardNoteSegue后使用该内容填充我的tableView(这是一个表单,包含)时使用segue self.forwardObject传递该变量textViews和TextFields)但是当我这样做时,我的textView并没有根据textView中的内容增加它的高度,

我想要的是当我们使用“textView.text = copiedContent”时textView应该增加它的高度,就像我们手动输入任何东西时一样

请正确理解我的问题,看看上传的视频(链接在上面提供)

如果我的问题不明白,请告诉我,我会解决它

谢谢

1 个答案:

答案 0 :(得分:0)

当您以编程方式修改textview的内容时,需要手动调用textViewDidChange。

这在UITextviewDelegate的方法描述中有记载:

  

文本视图调用此方法以响应用户启动的文本更改。不响应此方法调用此方法   以编程方式启动的更改。