Сделать UITextField снова простым | Кодементор

UITextField является одним из самых популярных элементов управления и появляется в любых приложениях. я уверен, что вы используете UITextField сотни раз в жизни.

И я уверен, ни один дизайнер не позволит вам использовать дефолтные UITextField. Они будут разрабатывать что-то другое, как показано ниже:

Обычно приходится настраивать UITextField с

  • Угловой радиус
  • Граница
  • Значок слева
  • Кнопка справа (показать пароль, очень популярная)
  • Подчеркнуть

Я расскажу вам, как это сделать очень быстро, и вы сможете повторно использовать его где угодно в своих проектах.

Начнем с первого, Corner radius.

extension UIView {
  func setCorner(radius: CGFloat) {
        layer.cornerRadius = radius
        clipsToBounds = true
    }
}

textField.setCorner(radius: 5)

Легко, верно? Иногда вам нужно сделать круглый угол, а не только круглый угол. Вы можете написать так.

extension UIView {
  func circleCorner() {
        superview?.layoutIfNeeded()
        setCorner(radius: frame.height / 2)
    }
}

Но я не использую этот способ, я обычно вычисляю радиус угла, равный половине высоты текстового поля.

extension UIView {
    func setBorder(width: CGFloat, color: UIColor) {
        layer.borderColor = color.cgColor
        layer.borderWidth = width
    }
}

textField.setBorder(width: 1, color: UIColor.green)

Подобно угловому радиусу, он очень популярен и используется много раз.
Обычно я предлагаю, чтобы ширина границы была 0,5–1 пиксель. Это выглядит очень красиво на любых экранах iPhone.

Мы используем leftView а также rightView свойства UITextField для добавления значка или кнопки.

3.1. Общая функция

extension UITextField {
    enum ViewType {
        case left, right
    }
    
    // (1)
    func setView(_ type: ViewType, with view: UIView) {
        if type == ViewType.left {
            leftView = view
            leftViewMode = .always
        } else if type == .right {
            rightView = view
            rightViewMode = .always
        }
    }
}

(1) — это общая функция для установки представления leftView или же rightView. Это хорошо, но недостаточно удобно для использования.

3.2. Добавить текст как вид

Добавьте эту функцию в UITextField расширение

// (2)
@discardableResult
func setView(_ view: ViewType, title: String, space: CGFloat = 0) -> UIButton {
    let button = UIButton(frame: CGRect(x: 0, y: 0, width: 50, height: frame.height))
    button.setTitle(title, for: UIControl.State())
    button.contentEdgeInsets = UIEdgeInsets(top: 4, left: space, bottom: 4, right: space)
    button.sizeToFit()
    setView(view, with: button)
    return button
}

(2) создает кнопку и устанавливает значение leftView/rightView, и вернуть его вам. Затем вы можете отформатировать кнопку, как хотите, изменить цвет, шрифт, установить угол или любой другой.

Параметр space является необязательным. См. пример ниже.

let blueButton = topTextField.setView(.right, title: "Show", space: 8)
blueButton.backgroundColor = .blue

let redButton = bottomTextField.setView(.right, title: "Show")
redButton.backgroundColor = .red

3.3. Добавить изображение как вид

@discardableResult
func setView(_ view: ViewType, image: UIImage?, width: CGFloat = 50) -> UIButton {
    let button = UIButton(frame: CGRect(x: 0, y: 0, width: width, height: frame.height))
    button.setImage(image, for: .normal)
    button.imageView!.contentMode = .scaleAspectFit
    setView(view, with: button)
    return button
}

Это также возвращает UIButton. Почему я возвращаю кнопку, а не изображение? Потому что вы можете легко добавить цель, и я предпочитаю UIButton чем тогда UIImageView 😄

То же, что и предыдущий, есть width параметр, который поможет вам определить ширину кнопки.
Посмотрите, как это работает…

let blueButton = topTextField.setView(.right, image: UIImage(named: "show_pass_active"))
blueButton.backgroundColor = .blue

let redButton = bottomTextField.setView(.left, image: UIImage(named: "password"),
                                         width: 80)
redButton.backgroundColor = .red

3.4. Добавить пустое пространство в качестве вида

По умолчанию слева места нет (topTextField) и выглядит очень плохо, если textField имеет рамку или другой цвет фона (см. демонстрацию).

Вот как это сделать.

@discardableResult
func setView(_ view: ViewType, space: CGFloat) -> UIView {
    let spaceView = UIView(frame: CGRect(x: 0, y: 0, width: space, height: 1))
    setView(view, with: spaceView)
    return spaceView
}

Надеюсь, это поможет вам сэкономить время и усилия при работе с UITextField. Вы можете получить доступ ко всему коду здесь.

Не забудьте поделиться со мной своим расширением UITextField.

Делитесь, чтобы расти.

PS: добавьте подчеркивание UITextField интересно и довольно долго писать в этом посте. Если вам интересно, как добавить и использовать подчеркивание в UITextField в качестве индикатора пишу на эту тему.

Наслаждайтесь кодированием.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *