Пользовательский UITextView с нижней границей - PullRequest
0 голосов
/ 17 декабря 2018

Я пытаюсь создать собственный класс UITextView для добавления нижней границы.Следующий код не показывает нижнюю границу.У меня есть альтернативное решение: добавить представление в раскадровку и манипулировать им по мере необходимости, но это не лучший вариант, так как мне приходится использовать UITextView во многих местах, поэтому я хотел создать собственный класс UITextView.У меня есть подобный код для пользовательского UITextField, который работает.

Мне также нужно изменить цвет этой рамки из кода.

Любая помощь?

import Foundation
import UIKit

class CustomTextView: UITextView {

    var bottomBorder = UIView()

    init(frame: CGRect) {
        super.init(frame: frame, textContainer: nil)
        self.initialize()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override func awakeFromNib() {
        super.awakeFromNib()
        self.initialize()

        // Setup Bottom-Border
        self.translatesAutoresizingMaskIntoConstraints = false

        bottomBorder = UIView.init(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
        bottomBorder.backgroundColor = .red
        bottomBorder.translatesAutoresizingMaskIntoConstraints = false

        addSubview(bottomBorder)

        bottomBorder.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
        bottomBorder.leftAnchor.constraint(equalTo: leftAnchor).isActive = true
        bottomBorder.rightAnchor.constraint(equalTo: rightAnchor).isActive = true
        bottomBorder.heightAnchor.constraint(equalToConstant: 1).isActive = true // Set Border-Strength
    }

    func initialize() {
    }

}

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Вы должны добавить bottomBorder в superview.

, поэтому замените следующую строку новой.

addSubview(bottomBorder)

до

self.superview!.addSubview(bottomBorder)

вы получите красную границу в вашем текстовом представлении.

0 голосов
/ 17 декабря 2018

Поскольку все, что вы делаете, - это добавление нижней границы, вы можете добавить ее прямо в UITextView, если хотите.Вы можете сделать это как InspectableVar, чтобы установить его для каждого текстового представления на вкладке атрибутов раскадровки.

private var borders = [UITextView: Bool]()

extension UITextView {

  @IBInspectable var showBottomBorder: Bool {
    get {
      guard let b = borders[self] else {
        return true
      }
      return b
    }
    set {
      borders[self] = newValue
      setUpBottomBorder()
    }
  }

  func setUpBottomBorder(){
    let border = UIView()

    border.translatesAutoresizingMaskIntoConstraints = false
    border.backgroundColor = UIColor.red
    self.addSubview(border)

    border.heightAnchor.constraint(equalToConstant: 1).isActive = true
    border.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true
    border.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true
    border.trailingAnchor.constraint(equalTo: self.trailingAnchor).isActive = true
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...