如何添加Show More / Show Less UIButton来控制UITextView

时间:2016-12-12 19:18:10

标签: swift uibutton uitextview

我正在使用UITextView来显示一些内容。在textView下面,我添加了一个UIButton,它可以控制TextView是否显示其部分或全部内容。

理想情况下,当按下按钮时,TextView将展开其高度以适应内容的长度。

我还没有找到一个好的解决方案。我想知道我是否应该使用UIlabel而不是textView。

1 个答案:

答案 0 :(得分:2)

你可以这样做:

<强> 1。在故事板中添加UITextView和UIButton。

enter image description here

<强> 2。如果您使用的是Autolayout Constraints,请设置UITextView高度的出口。

enter image description here

第3。在ViewController类中,将outlet设为:

  

@IBOutlet var txtView:UITextView!

     

@IBOutlet var btn_Show:UIButton!

     

@IBOutlet var textView_HeightConstraint:NSLayoutConstraint!

<强> 4。创建一个方法,根据其中的文本为您提供UITextView的高度。

func getRowHeightFromText(strText : String!) -> CGFloat
{
    let textView : UITextView! = UITextView(frame: CGRect(x:      self.txtView.frame.origin.x,
    y: 0, 
    width: self.txtView.frame.size.width,
    height: 0))
    textView.text = strText
    textView.font = UIFont(name: "Fira Sans", size:  16.0)
    textView.sizeToFit()

    var txt_frame : CGRect! = CGRect()
    txt_frame = textView.frame

    var size : CGSize! = CGSize()
    size = txt_frame.size

    size.height = 50 + txt_frame.size.height

    return size.height
}

<强> 5。点击按钮:

   @IBAction func showMore_Button_Clicked(_ sender: UIButton)

     {

       if sender.tag == 0

         {
            let height = self.getRowHeightFromText(strText: self.txtView.text)

            self.textView_HeightConstraint.constant = height

            self.view.layoutIfNeeded()

            btn_Show.setTitle("ShowLess", for: .normal)

            sender.tag = 1

        }

        else
        {

            self.textView_HeightConstraint.constant = 116

            self.view.layoutIfNeeded()

            btn_Show.setTitle("ShowMore", for: .normal)

            sender.tag = 0

        }

    }

<强> 6。如果您没有使用AutoLayoutConstraints,只需单击UIButton即可更改UITextView的Frame(Height)。不需要&#34; textView_HeightConstraint&#34;

 @IBAction func showMore_Button_Clicked(_ sender: UIButton)

    {

        if sender.tag == 0

        {

            let height = self.getRowHeightFromText(strText: self.txtView.text)

            self.txtView.frame = CGRect(x: self.txtView.frame.origin.x, y: self.txtView.frame.origin.y, width: self.txtView.frame.size.width, height: height)

            btn_Show.setTitle("ShowLess", for: .normal)

            sender.tag = 1

        }

        else

        {

            self.txtView.frame = CGRect(x: self.txtView.frame.origin.x, y: self.txtView.frame.origin.y, width: self.txtView.frame.size.width, height: 116)

            btn_Show.setTitle("ShowMore", for: .normal)

            sender.tag = 0

        }

    }