Closed somerepository closed 3 years ago
Добрый, (Я нуб , так что извиняюсь если что то не понимаю) Есть LogIn viewcontroller написанный полностью программно с двумя textfields:
часть кода :
class LoginController: UIViewController {
private lazy var emailTextField: UITextField = {
let tf = UITextField()
tf.setBottomBorder()
tf.setLeftPaddingPoints(15)
tf.setRightPaddingPoints(15)
tf.textColor = .black
tf.autocorrectionType = .no
tf.autocapitalizationType = .none
tf.keyboardType = .emailAddress
tf.attributedPlaceholder = NSAttributedString(string:"Email", attributes:[NSAttributedString.Key.foregroundColor: UIColor.systemGray])
tf.font = UIFont(name: "Font", size: 16)
tf.delegate = self
tf.addTarget(self, action: #selector(handleTextInputChange), for: .editingChanged)
return tf
}()
…
override func viewDidLoad() {
super.viewDidLoad()
let bounds = UIScreen.main.bounds
let height = bounds.size.height
navigationController?.isNavigationBarHidden = true
view.backgroundColor = UIColor.rgb(red: 250, green: 250, blue: 250)
view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleTapOnView)))
view.addSubview(dontHaveAccountButton)
dontHaveAccountButton.anchor(left: view.safeAreaLayoutGuide.leftAnchor, bottom: view.safeAreaLayoutGuide.bottomAnchor, right: view.safeAreaLayoutGuide.rightAnchor, height: height/8)
view.addSubview(logoContainerView)
logoContainerView.anchor(top: view.safeAreaLayoutGuide.topAnchor, paddingTop: 150, width: 100, height: 100)
logoContainerView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
view.addSubview(ForgotPasswordButton)
ForgotPasswordButton.anchor(left: view.safeAreaLayoutGuide.leftAnchor, bottom: view.safeAreaLayoutGuide.bottomAnchor, right: view.safeAreaLayoutGuide.rightAnchor, height: height/8)
setupInputFields()
}
private func setupInputFields() {
let stackView = UIStackView(arrangedSubviews: [emailTextField, passwordTextField, loginButton, ForgotPasswordButton])
let bounds = UIScreen.main.bounds
let height = bounds.size.height
stackView.axis = .vertical
stackView.spacing = 20
stackView.distribution = .fillEqually
view.addSubview(stackView)
stackView.anchor(top: view.safeAreaLayoutGuide.topAnchor, left: view.safeAreaLayoutGuide.leftAnchor, right: view.safeAreaLayoutGuide.rightAnchor, paddingTop: height/3, paddingLeft: 40, paddingRight: 40, height: 240)
}
как мне сделать чтобы emailTextField стал BorderedTextField вместо обычного UITextField
Я вас понял, смотрите что могу предложить)
К сожалению, но программно без .xib файла на данный момент не получится реализовать своего наследника от UnderlinedTextField. На меня уже коллеги ругались, тоже так хотели, но что поделать - я приверженец .xib файлов, так что изначально такой возможности, чтобы без них обойтись - не заложил(
На самом деле очень интересный кейс) Он простой - и своей простотой он все мои концепции рушит. Задумка либы была в том, чтобы максимально сложные и мудрёные кейсы решать, а в таких простых - можно, безусловно, сделать, но... как по воробьям из пушки получается)
Что могу предложить, чтобы ваш кейс решить.
Первый путь длинный и довольно сложный - заюзать данную либу. В помощь есть краткая заметка о том, как сделать свое собственное поле ввода на основе UnderlinedTextField, https://github.com/chausovSurfStudio/TextFieldsCatalog/blob/master/Docs/Configuration.md#Создание-собственного-поля-ввода.
Чтобы сделать его как нативный bordered
- можно посмотреть Example проект, а именно реализацию BoxTextField (там потребуется захендлить замыкание, которое вызывается при смене состояния - по этому состоянию можно будет менять цвет границы у поля ввода, в общем, в Example проекте это есть :) ). Но это в случае, если реально по дизайну надо менять цвет границы в зависимости от состояния, если нет - можно опустить этот пункт.
Еще интересный вопрос с плейсхолдером - плейсхолдер в данной либе можно по параметрам и дизайну сделать аналогичный нативному, как у вас на скриншоте, но только в последних обновлениях (сейчас на стадии проверки/мержа, в ветке pseudo-placeholder
, там же обновленная документация)
Но в любом случае - пока без .xib файла не обойтись.
Второй путь - зависит от того, какие еще кейсы и состояния есть в вашем дизайне у поля ввода. Если вы хотели заюзать данную либу чисто для кейса проверки email при снятии фокуса - то можно обойтись более простыми путем, а именно:
textFieldDidEndEditing
делегата UITextFieldDelegate
, и при вызове данного метода - проводить проверку на соответствие введенного текста регуляркеЗа отсутствием активности закрывается
добрый вечер! рад помочь, но требуется больше вводных данных, из названия - не совсем понятно, о чем идет речь)