В моем проекте я создал подкласс UIView
, который в основном является контейнером для UITextField
.Все работает нормально, за исключением того, что я получаю странное сообщение об ошибке в своей консоли, когда я выбираю текстовое поле на экране, и я не знаю, как сделать, чтобы оно исчезло:
[Снимок] Снимокпредставление (0x119d2d240, _UIReplicantView), которое не было обработано хотя бы один раз, требует afterScreenUpdates: YES.
Я пытался поместить некоторые view.layoutIfNeeded()
в некоторые моменты, но сообщение остается.Вот мой код:
import UIKit
class BTShimmerTextField: BTShimmerView {
let nestedTextField = UITextField()
var didPressReturn: (() -> ())? = nil
var placeholder: String? {
get {
return nestedTextField.placeholder
}
set {
nestedTextField.placeholder = newValue
}
}
var darkColor: UIColor? {
get {
return darkView.backgroundColor
}
set {
darkView.backgroundColor = newValue
}
}
var lightColor: UIColor? {
get {
return lightView.backgroundColor
}
set {
lightView.backgroundColor = newValue
}
}
var isSecureTextEntry: Bool {
get {
return nestedTextField.isSecureTextEntry
}
set {
nestedTextField.isSecureTextEntry = newValue
}
}
var autocorrectionType: UITextAutocorrectionType {
get {
return nestedTextField.autocorrectionType
}
set {
nestedTextField.autocorrectionType = newValue
}
}
override init(){
super.init()
setupTextField()
}
override init(frame: CGRect) {
super.init(frame: frame)
setupTextField()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setupTextField()
}
fileprivate func setupTextField(){
nestedTextField.backgroundColor = UIColor.white // UIColor(named: "BTDark")
nestedTextField.textAlignment = .center
nestedTextField.tintColor = UIColor(named: "BTDark")
nestedTextField.font = UIFont(name: "Metropolis-Regular", size: 16)
nestedTextField.keyboardAppearance = .dark
nestedTextField.delegate = self
self.addSubview(nestedTextField)
nestedTextField.anchor(top: self.topAnchor, leading: self.leadingAnchor, trailing: self.trailingAnchor, bottom: self.bottomAnchor, padding: UIEdgeInsets(top: 2, left: 2, bottom: 2, right: 2))
}
@discardableResult
override func becomeFirstResponder() -> Bool {
return nestedTextField.becomeFirstResponder()
}
}
extension BTShimmerTextField: UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if textField == nestedTextField {
nestedTextField.resignFirstResponder()
if let didPressReturn = didPressReturn { didPressReturn() }
return false
}
return true
}
}
Примечание: BTShimmerView
также является подклассом UIView, в котором я установил 2 UIView с 2 различными фонами, с CAGradientLayer
, чтобы сделать некоторыеэффект отражения.
Вот как я могу добавить его к своему виду:
import UIKit
class LoginViewController: UIViewController {
override var prefersStatusBarHidden: Bool {
return true
}
var loginView = BTShimmerTextField()
var passwordView = BTShimmerTextField()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor(named: "BTDark")
setupLoginViews()
}
fileprivate func setupLoginViews(){
loginView.darkColor = UIColor(named: "BTDarkGold")
loginView.lightColor = UIColor(named: "BTGold")
loginView.placeholder = "Identifiant"
loginView.didPressReturn = { self.passwordView.becomeFirstResponder() }
loginView.autocorrectionType = .no
view.addSubview(loginView)
loginView.translatesAutoresizingMaskIntoConstraints = false
loginView.heightAnchor.constraint(equalToConstant: 30).isActive = true
loginView.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 0.7).isActive = true
loginView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
loginView.centerYAnchor.constraint(equalTo: view.centerYAnchor, constant: -25).isActive = true
passwordView.darkColor = UIColor(named: "BTDarkGold")
passwordView.lightColor = UIColor(named: "BTGold")
passwordView.placeholder = "Mot de passe"
passwordView.isSecureTextEntry = true
passwordView.autocorrectionType = .no
view.addSubview(passwordView)
passwordView.translatesAutoresizingMaskIntoConstraints = false
passwordView.heightAnchor.constraint(equalToConstant: 30).isActive = true
passwordView.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 0.7).isActive = true
passwordView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
passwordView.centerYAnchor.constraint(equalTo: view.centerYAnchor, constant: 25).isActive = true
}
}
Кто-нибудь знает, как я могу устранить эту ошибку?Эта ошибка действительно проблематична?