2016-12-12 3 views
0

Я использую UITextView для отображения некоторого содержимого. Под textView я добавил UIButton, который может контролировать, будет ли TextView отображать часть или весь ее контент.Как добавить Показать больше/Показать меньше UIButton для управления UITextView

В идеале, при нажатии кнопки TextView расширяется Высота, чтобы соответствовать длине содержимого.

Я не нашел подходящего решения. Интересно, следует ли использовать UIlabel вместо textView.

+0

Его очень легко реализовать. Выполните следующие шаги: 1. Создайте UITextView со статической высотой и добавьте кнопку «Showmore» внизу текста. 2. При щелчке uibutton измените высоту uitextview. Измените высоту в соответствии с текстом в ней, а затем обновите рамку кнопки. Измените заголовок, но до «Бессмысленный». – SNarula

ответ

1

Вы можете сделать эту вещь работает так:

1. Добавьте UITextView и UIButton в раскадровку.

enter image description here

2. Если вы используете Autolayout ограничений, сделать выход высоты UITextView.

enter image description here

3. В классе ViewController сделать выходы как:

@IBOutlet вар 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, просто изменить раму (высота) UITextView при щелчке UIButton. Нет необходимости в "textView_HeightConstraint"

@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 

     } 

    } 
+0

Это действительно приятно. Спасибо за вашу помощь! – WoShiNiBaBa

+0

Добро пожаловать. :) Сообщите мне, нужна ли какая-либо помощь в этом отношении. – SNarula