Swiftプログラミングの初心者です。フローティングプレースホルダー入力を使用してログインページを設計する必要があります。PODを使用してMDCTextInputをインストールしました。
追加されたインポート
import MaterialComponents.MaterialTextFields
そして、以下のコードが追加されたviewDidLoad()で、
companyID.placeholder = "Company ID"
companyID.placeholderLabel.highlightedTextColor = UIColor.white
companyID.placeholderLabel.textColor = UIColor.white
companyID.underline?.color = UIColor.white
companyID.delegate = self
iOSの材料コンポーネントに記載されている手順に従いました
私はこの行について明確ではありません、
To achieve the animations and presentations defined by the guidelines (floating placeholders, character counts), a controller that conforms to protocol MDCTextInputController must be initialized to manage the text field.
私はフローティングプレースホルダーアニメーションを取得していません、Swift4でこれを行う方法は?誰もが私にアイデアを提供してください。
マテリアルiOS Githubリンク: material-components-ios
SkyFloatingLabelTextField Cocoaポッドを使用します。実装ははるかに簡単です。1行のコードを書く必要さえありません。ストーリーボードから構成できます。ここから取得できます: https://github.com/Skyscanner/SkyFloatingLabelTextField
アニメーションを取得するには、var
classのサブクラスのMDCTextInputControllerBase
を作成できます(<-これらのクラスはMDCTextInputControllerFloatingPlaceholder
プロトコルを確認します<-このプロトコルはMDCTextInputController
protocolを確認します)。 UIViewController内に変数を作成し、textInput
を渡してinitしてMDCTextField
を渡します。
なぜ?
But to achieve the animations and presentations defined by the guidelines (floating placeholders, character counts), a controller that conforms to protocol MDCTextInputController must be initialized to manage the text field.
これは、MDCTextInputControllerBase
のいずれかを初期化する必要があることを意味しますclass/MDCTextInputController
プロトコル
十分な話。いくつかのコードを参照してください:
final class SomeVC: UIViewController {
/* This is a subclass of MDCTextInputControllerBase */
var textFieldControllerFloating = MDCTextInputControllerUnderline()
/* For multiple textField */
var arrayOftextFieldControllerFloating = [MDCTextInputControllerUnderline]()
override func viewDidLoad() {
let textFieldFloating = MDCTextField()
self.view.addSubview(textFieldFloating)
textFieldFloating.placeholder = "Full Name"
textFieldFloating.delegate = self
textFieldControllerFloating = MDCTextInputControllerUnderline(textInput: textFieldFloating) // This will animate the textfield's place holder
/* If you have multiple textField */
arrayOftextFieldControllerFloating.append(MDCTextInputControllerUnderline(textInput: textFieldFloating1))
arrayOftextFieldControllerFloating.append(MDCTextInputControllerUnderline(textInput: textFieldFloating2))
arrayOftextFieldControllerFloating.append(MDCTextInputControllerUnderline(textInput: textFieldFloating3))
// Must have a MDCTextField / MDCMultilineTextField as textInput
}
}
extension SomeVC: UITextFieldDelegate {}
注:MDCTextField
またはMDCMultilineTextField
ごとに新しいコントローラーを作成する必要があります
フローティングラベルのあるUITextField:
TextFieldプレースホルダーをクリックすると、フローティングラベルが付いた上向きにアニメーション化します。
空のSwiftクラス名FloatingLabeledTextFieldを作成し、そのクラスのすべてのコードを貼り付けます。
使用法:オブジェクトライブラリからUITextFieldをドラッグします。 XcodeでTextFieldを選択し、Identity Inspectorに移動して、FloatingLabeledTextFieldにクラスを割り当てます。それでおしまい。
import UIKit
class FloatingLabeledTextField: UITextField {
var floatingLabel: UILabel!
var placeHolderText: String?
var floatingLabelColor: UIColor = UIColor.blue {
didSet {
self.floatingLabel.textColor = floatingLabelColor
}
var floatingLabelFont: UIFont = UIFont.systemFont(ofSize: 15) {
didSet {
self.floatingLabel.font = floatingLabelFont
}
}
var floatingLabelHeight: CGFloat = 30
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
let flotingLabelFrame = CGRect(x: 0, y: 0, width: frame.width, height: 0)
floatingLabel = UILabel(frame: flotingLabelFrame)
floatingLabel.textColor = floatingLabelColor
floatingLabel.font = floatingLabelFont
floatingLabel.text = self.placeholder
self.addSubview(floatingLabel)
placeHolderText = placeholder
NotificationCenter.default.addObserver(self, selector: #selector(textFieldDidBeginEditing), name: UITextField.textDidBeginEditingNotification, object: self)
NotificationCenter.default.addObserver(self, selector: #selector(textFieldDidEndEditing), name: UITextField.textDidEndEditingNotification, object: self)
}
@objc func textFieldDidBeginEditing(_ textField: UITextField) {
if self.text == "" {
UIView.animate(withDuration: 0.3) {
self.floatingLabel.frame = CGRect(x: 0, y: -self.floatingLabelHeight, width: self.frame.width, height: self.floatingLabelHeight)
}
self.placeholder = ""
}
}
@objc func textFieldDidEndEditing(_ textField: UITextField) {
if self.text == "" {
UIView.animate(withDuration: 0.1) {
self.floatingLabel.frame = CGRect(x: 0, y: 0, width: self.frame.width, height: 0)
}
self.placeholder = placeHolderText
}
}
deinit {
NotificationCenter.default.removeObserver(self)
}
}
ViewControllerのビューでTextfieldをドラッグし、Identity InspectorでFloatingLabeledTextFieldにクラスを割り当てます。
結果: