Добавить Читать больше / Читать меньше до конца UILabel SWIFT - PullRequest
0 голосов
/ 27 мая 2018

Привет, мне нужна UILabel с Read More и Read less Но я не нашел хорошего ответа, кроме this Но проблема в том, что я не знаю, что делает этот ответ.Как я уже пробовал, но получаю ошибки, также В ЭТОМ ОТВЕТЕ что такое "@ IBOutlet слабый var lblHeight: NSLayoutConstraint!"

Мой код

import UIKit

class ExpandedLabelViewController: UIViewController {

  @IBOutlet weak var myLabel: UILabel!
  @IBOutlet weak var lblHeight: NSLayoutConstraint!
  @IBOutlet weak var btn: UIButton!

  var isLabelAtMaxHeight = false
  override func viewDidLoad() 
  {
    super.viewDidLoad()
    myLabel.text = "bla bla blabla bla blabla bla blabla bla blabla bla blabla bla bla"

  }

  @IBAction func btnAction(_ sender: Any) 
  {
    if isLabelAtMaxHeight {
        btn.setTitle("Read more", for: .normal)
        isLabelAtMaxHeight = false
        lblHeight.constant = 70
    }
    else {
        btn.setTitle("Read less", for: .normal)
        isLabelAtMaxHeight = true
        lblHeight.constant = getLabelHeight(text: "bla bla bla vvvbla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla bla", width: view.bounds.width, font: myLabel.font)
    }
  }
  func getLabelHeight(text: String, width: CGFloat, font: UIFont) -> CGFloat {

    let lbl = UILabel(frame: .zero)
    lbl.frame.size.width = width
    lbl.font = font
    lbl.numberOfLines = 0
    lbl.text = text
    lbl.sizeToFit()
    lbl.adjustsFontSizeToFitWidth = true
    return lbl.frame.size.height

  }
}

В моем коде у меня 2 из " myLabel " Один из них UILabel, а второй в NSLayoutConstraint.

Я получаю это исключение.

2018-05-27 12:28:53.274735+0500 testingControllers[8035:240013] -[UILabel setConstant:]: unrecognized selector sent to instance 0x7fbd0f513e60
2018-05-27 12:28:53.291991+0500 testingControllers[8035:240013] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UILabel setConstant:]: unrecognized selector sent to instance 0x7fbd0f513e60'

Любой здесь, нужна помощь.

Спасибо

1 Ответ

0 голосов
/ 27 мая 2018

Пожалуйста, попробуйте это: -

class FirstViewController: UIViewController, UIGestureRecognizerDelegate {

    @IBOutlet weak var myLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        myLabel.text = "bla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla bla"
        myLabel.numberOfLines = 2
        let tap:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.labelAction(gesture:)))
        myLabel.addGestureRecognizer(tap)
        myLabel.isUserInteractionEnabled = true
        tap.delegate = self
    }

    @objc func labelAction(gesture: UITapGestureRecognizer)
    {
        if myLabel.numberOfLines == 0 {
            myLabel.numberOfLines = 2
        } else {
            myLabel.numberOfLines = 0
        }
    }
}

Если вы хотите обрабатывать, используя кнопку, то:

@IBAction func action(_ sender: Any) {
    if myLabel.numberOfLines == 0 {
        myLabel.numberOfLines = 2
    } else {
        myLabel.numberOfLines = 0
    }
}

Также вам необходимо установить ограничения для высоты метки, как показано на скриншоте ниже:enter image description here

Если вы хотите показывать больше и меньше текста в конце текста надписи, добавьте больше текста и меньше текста в надписи соответственно.

...