material-components_materia.../components/TextFields/examples/TextFieldKitchenSinkExample.swift

615 lines
28 KiB
Swift

/*
Copyright 2016-present the Material Components for iOS authors. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
// swiftlint:disable file_length
// swiftlint:disable type_body_length
// swiftlint:disable function_body_length
import UIKit
import MaterialComponents.MaterialTextFields
import MaterialComponents.MaterialAppBar
import MaterialComponents.MaterialButtons
import MaterialComponents.MaterialTypography
import MaterialComponents.MaterialPalettes
final class TextFieldKitchenSinkSwiftExample: UIViewController {
let scrollView = UIScrollView()
let controlLabel: UILabel = {
let controlLabel = UILabel()
controlLabel.translatesAutoresizingMaskIntoConstraints = false
controlLabel.text = "Options"
controlLabel.font = UIFont.preferredFont(forTextStyle: .headline)
controlLabel.textColor = UIColor(white: 0, alpha: MDCTypography.headlineFontOpacity())
return controlLabel
}()
let singleLabel: UILabel = {
let singleLabel = UILabel()
singleLabel.translatesAutoresizingMaskIntoConstraints = false
singleLabel.text = "Single-line Text Fields"
singleLabel.font = UIFont.preferredFont(forTextStyle: .headline)
singleLabel.textColor = UIColor(white: 0, alpha: MDCTypography.headlineFontOpacity())
singleLabel.numberOfLines = 0
return singleLabel
}()
let multiLabel: UILabel = {
let multiLabel = UILabel()
multiLabel.translatesAutoresizingMaskIntoConstraints = false
multiLabel.text = "Multi-line Text Fields"
multiLabel.font = UIFont.preferredFont(forTextStyle: .headline)
multiLabel.textColor = UIColor(white: 0, alpha: MDCTypography.headlineFontOpacity())
multiLabel.numberOfLines = 0
return multiLabel
}()
let errorLabel: UILabel = {
let errorLabel = UILabel()
errorLabel.translatesAutoresizingMaskIntoConstraints = false
errorLabel.text = "In Error:"
errorLabel.font = UIFont.preferredFont(forTextStyle: .subheadline)
errorLabel.textColor = UIColor(white: 0, alpha: MDCTypography.subheadFontOpacity())
errorLabel.numberOfLines = 0
return errorLabel
}()
let helperLabel: UILabel = {
let helperLabel = UILabel()
helperLabel.translatesAutoresizingMaskIntoConstraints = false
helperLabel.text = "Show Helper Text:"
helperLabel.font = UIFont.preferredFont(forTextStyle: .subheadline)
helperLabel.textColor = UIColor(white: 0, alpha: MDCTypography.subheadFontOpacity())
helperLabel.numberOfLines = 0
return helperLabel
}()
var allInputControllers = [MDCTextInputController]()
var allTextFieldControllers = [MDCTextInputController]()
var allMultilineTextFieldControllers = [MDCTextInputController]()
var controllersWithCharacterCount = [MDCTextInputController]()
var controllersFullWidth = [MDCTextInputControllerFullWidth]()
let unstyledTextField = MDCTextField()
let unstyledMultilineTextField = MDCMultilineTextField()
lazy var textInsetsModeButton: MDCButton = self.setupButton()
lazy var characterModeButton: MDCButton = self.setupButton()
lazy var clearModeButton: MDCButton = self.setupButton()
lazy var underlineButton: MDCButton = self.setupButton()
deinit {
NotificationCenter.default.removeObserver(self)
}
override func viewDidLoad() {
super.viewDidLoad()
setupExampleViews()
}
func setupFilledTextFields() -> [MDCTextInputControllerFilled] {
let textFieldFilled = MDCTextField()
textFieldFilled.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(textFieldFilled)
textFieldFilled.delegate = self
let textFieldControllerFilled = MDCTextInputControllerFilled(textInput: textFieldFilled)
textFieldControllerFilled.isFloatingEnabled = false
textFieldControllerFilled.placeholderText = "This is a filled text field"
let textFieldFilledFloating = MDCTextField()
textFieldFilledFloating.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(textFieldFilledFloating)
textFieldFilledFloating.delegate = self
let textFieldControllerFilledFloating = MDCTextInputControllerFilled(textInput: textFieldFilledFloating)
textFieldControllerFilledFloating.placeholderText = "This is filled and floating"
return [textFieldControllerFilled, textFieldControllerFilledFloating]
}
func setupFullWidthTextFields() -> [MDCTextInputControllerFullWidth] {
let textFieldFullWidthPlaceholder = MDCTextField()
textFieldFullWidthPlaceholder.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(textFieldFullWidthPlaceholder)
textFieldFullWidthPlaceholder.delegate = self
textFieldFullWidthPlaceholder.clearButtonMode = .whileEditing
let textFieldControllerFullWidthPlaceholder =
MDCTextInputControllerFullWidth(textInput: textFieldFullWidthPlaceholder)
textFieldControllerFullWidthPlaceholder.placeholderText = "This is a full width text field"
let textFieldFullWidthCharMax = MDCTextField()
textFieldFullWidthCharMax.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(textFieldFullWidthCharMax)
textFieldFullWidthCharMax.delegate = self
textFieldFullWidthCharMax.clearButtonMode = .whileEditing
let textFieldControllerFullWidthCharMax =
MDCTextInputControllerFullWidth(textInput: textFieldFullWidthCharMax)
textFieldControllerFullWidthCharMax.characterCountMax = 50
textFieldControllerFullWidthCharMax.placeholderText =
"This is a full width text field with character count and a very long placeholder"
controllersWithCharacterCount.append(textFieldControllerFullWidthCharMax)
return [textFieldControllerFullWidthPlaceholder,
textFieldControllerFullWidthCharMax]
}
func setupFloatingUnderlineTextFields() -> [MDCTextInputControllerUnderline] {
let textFieldFloating = MDCTextField()
textFieldFloating.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(textFieldFloating)
textFieldFloating.delegate = self
textFieldFloating.clearButtonMode = .whileEditing
let textFieldControllerFloating = MDCTextInputControllerUnderline(textInput: textFieldFloating)
textFieldControllerFloating.placeholderText = "This is a text field w/ floating placeholder"
let textFieldFloatingCharMax = MDCTextField()
textFieldFloatingCharMax.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(textFieldFloatingCharMax)
textFieldFloatingCharMax.delegate = self
textFieldFloatingCharMax.clearButtonMode = .whileEditing
let textFieldControllerFloatingCharMax =
MDCTextInputControllerUnderline(textInput: textFieldFloatingCharMax)
textFieldControllerFloatingCharMax.characterCountMax = 50
textFieldControllerFloatingCharMax.placeholderText = "This is floating with character count"
controllersWithCharacterCount.append(textFieldControllerFloatingCharMax)
return [textFieldControllerFloating, textFieldControllerFloatingCharMax]
}
func setupInlineUnderlineTextFields() -> [MDCTextInputControllerUnderline] {
let textFieldUnderline = MDCTextField()
textFieldUnderline.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(textFieldUnderline)
textFieldUnderline.delegate = self
textFieldUnderline.clearButtonMode = .whileEditing
let textFieldControllerUnderline = MDCTextInputControllerUnderline(textInput: textFieldUnderline)
textFieldControllerUnderline.isFloatingEnabled = false
let textFieldUnderlinePlaceholder = MDCTextField()
textFieldUnderlinePlaceholder.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(textFieldUnderlinePlaceholder)
textFieldUnderlinePlaceholder.delegate = self
textFieldUnderlinePlaceholder.clearButtonMode = .whileEditing
let textFieldControllerUnderlinePlaceholder =
MDCTextInputControllerUnderline(textInput: textFieldUnderlinePlaceholder)
textFieldControllerUnderlinePlaceholder.isFloatingEnabled = false
textFieldControllerUnderlinePlaceholder.placeholderText = "This is a text field w/ inline placeholder"
let textFieldUnderlineCharMax = MDCTextField()
textFieldUnderlineCharMax.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(textFieldUnderlineCharMax)
textFieldUnderlineCharMax.delegate = self
textFieldUnderlineCharMax.clearButtonMode = .whileEditing
let textFieldControllerUnderlineCharMax =
MDCTextInputControllerUnderline(textInput: textFieldUnderlineCharMax)
textFieldControllerUnderlineCharMax.characterCountMax = 50
textFieldControllerUnderlineCharMax.isFloatingEnabled = false
textFieldControllerUnderlineCharMax.placeholderText = "This is a text field w/ character count"
controllersWithCharacterCount.append(textFieldControllerUnderlineCharMax)
return [textFieldControllerUnderline, textFieldControllerUnderlinePlaceholder,
textFieldControllerUnderlineCharMax]
}
func setupSpecialTextFields() -> [MDCTextInputControllerFloatingPlaceholder] {
let textFieldDisabled = MDCTextField()
textFieldDisabled.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(textFieldDisabled)
textFieldDisabled.delegate = self
textFieldDisabled.isEnabled = false
let textFieldControllerUnderlineDisabled =
MDCTextInputControllerUnderline(textInput: textFieldDisabled)
textFieldControllerUnderlineDisabled.isFloatingEnabled = false
textFieldControllerUnderlineDisabled.placeholderText = "This is a disabled text field"
let textFieldCustomFont = MDCTextField()
textFieldCustomFont.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(textFieldCustomFont)
textFieldCustomFont.font = UIFont.preferredFont(forTextStyle: .headline)
textFieldCustomFont.delegate = self
textFieldCustomFont.clearButtonMode = .whileEditing
let textFieldControllerUnderlineCustomFont =
MDCTextInputControllerUnderline(textInput: textFieldCustomFont)
textFieldControllerUnderlineCustomFont.inlinePlaceholderFont = UIFont.preferredFont(forTextStyle: .headline)
textFieldControllerUnderlineCustomFont.isFloatingEnabled = false
textFieldControllerUnderlineCustomFont.placeholderText = "This is a custom font"
let textFieldCustomFontFloating = MDCTextField()
textFieldCustomFontFloating.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(textFieldCustomFontFloating)
textFieldCustomFontFloating.font = UIFont.preferredFont(forTextStyle: .headline)
textFieldCustomFontFloating.delegate = self
textFieldCustomFontFloating.clearButtonMode = .whileEditing
textFieldCustomFontFloating.cursorColor = .orange
let textFieldControllerUnderlineCustomFontFloating =
MDCTextInputControllerUnderline(textInput: textFieldCustomFontFloating)
textFieldControllerUnderlineCustomFontFloating.characterCountMax = 40
textFieldControllerUnderlineCustomFontFloating.placeholderText = "This is a custom font with the works"
textFieldControllerUnderlineCustomFontFloating.helperText = "Custom Font"
textFieldControllerUnderlineCustomFontFloating.activeColor = .green
textFieldControllerUnderlineCustomFontFloating.normalColor = .purple
textFieldControllerUnderlineCustomFontFloating.leadingUnderlineLabelTextColor = .cyan
textFieldControllerUnderlineCustomFontFloating.trailingUnderlineLabelTextColor = .magenta
textFieldControllerUnderlineCustomFontFloating.leadingUnderlineLabelFont =
UIFont.preferredFont(forTextStyle: .headline)
textFieldControllerUnderlineCustomFontFloating.inlinePlaceholderFont =
UIFont.preferredFont(forTextStyle: .headline)
textFieldControllerUnderlineCustomFontFloating.trailingUnderlineLabelFont =
UIFont.preferredFont(forTextStyle: .subheadline)
textFieldCustomFontFloating.clearButton.tintColor = MDCPalette.red.accent400
textFieldControllerUnderlineCustomFontFloating.floatingPlaceholderNormalColor = .yellow
textFieldControllerUnderlineCustomFontFloating.floatingPlaceholderActiveColor = .orange
let bundle = Bundle(for: TextFieldKitchenSinkSwiftExample.self)
let leadingViewImage = UIImage(named: "ic_search", in: bundle, compatibleWith: nil)!
let textFieldLeadingView = MDCTextField()
textFieldLeadingView.leadingViewMode = .always
textFieldLeadingView.leadingView = UIImageView(image:leadingViewImage)
textFieldLeadingView.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(textFieldLeadingView)
textFieldLeadingView.delegate = self
textFieldLeadingView.clearButtonMode = .whileEditing
let textFieldControllerUnderlineLeadingView =
MDCTextInputControllerUnderline(textInput: textFieldLeadingView)
textFieldControllerUnderlineLeadingView.isFloatingEnabled = false
textFieldControllerUnderlineLeadingView.placeholderText = "This has a leading view"
let textFieldLeadingViewFloating = MDCTextField()
textFieldLeadingViewFloating.leadingViewMode = .always
textFieldLeadingViewFloating.leadingView = UIImageView(image:leadingViewImage)
textFieldLeadingViewFloating.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(textFieldLeadingViewFloating)
textFieldLeadingViewFloating.delegate = self
textFieldLeadingViewFloating.clearButtonMode = .whileEditing
let textFieldControllerUnderlineLeadingViewFloating =
MDCTextInputControllerUnderline(textInput: textFieldLeadingViewFloating)
textFieldControllerUnderlineLeadingViewFloating.placeholderText = "This has a leading view and floats"
let trailingViewImage = UIImage(named: "ic_done", in: bundle, compatibleWith: nil)!
let textFieldTrailingView = MDCTextField()
textFieldTrailingView.trailingViewMode = .always
textFieldTrailingView.trailingView = UIImageView(image:trailingViewImage)
textFieldTrailingView.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(textFieldTrailingView)
textFieldTrailingView.delegate = self
textFieldTrailingView.clearButtonMode = .whileEditing
let textFieldControllerUnderlineTrailingView =
MDCTextInputControllerUnderline(textInput: textFieldTrailingView)
textFieldControllerUnderlineTrailingView.isFloatingEnabled = false
textFieldControllerUnderlineTrailingView.placeholderText = "This has a trailing view"
let textFieldTrailingViewFloating = MDCTextField()
textFieldTrailingViewFloating.trailingViewMode = .always
textFieldTrailingViewFloating.trailingView = UIImageView(image:trailingViewImage)
textFieldTrailingViewFloating.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(textFieldTrailingViewFloating)
textFieldTrailingViewFloating.delegate = self
textFieldTrailingViewFloating.clearButtonMode = .whileEditing
let textFieldControllerUnderlineTrailingViewFloating =
MDCTextInputControllerUnderline(textInput: textFieldTrailingViewFloating)
textFieldControllerUnderlineTrailingViewFloating.placeholderText = "This has a trailing view and floats"
let textFieldLeadingTrailingView = MDCTextField()
textFieldLeadingTrailingView.leadingViewMode = .whileEditing
textFieldLeadingTrailingView.leadingView = UIImageView(image: leadingViewImage)
textFieldLeadingTrailingView.trailingViewMode = .unlessEditing
textFieldLeadingTrailingView.trailingView = UIImageView(image:trailingViewImage)
textFieldLeadingTrailingView.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(textFieldLeadingTrailingView)
textFieldLeadingTrailingView.delegate = self
textFieldLeadingTrailingView.clearButtonMode = .whileEditing
let textFieldControllerUnderlineLeadingTrailingView =
MDCTextInputControllerUnderline(textInput: textFieldLeadingTrailingView)
textFieldControllerUnderlineLeadingTrailingView.isFloatingEnabled = false
textFieldControllerUnderlineLeadingTrailingView.placeholderText =
"This has leading & trailing views and a very long placeholder that should be truncated"
let textFieldLeadingTrailingViewFloating = MDCTextField()
textFieldLeadingTrailingViewFloating.leadingViewMode = .always
textFieldLeadingTrailingViewFloating.leadingView = UIImageView(image: leadingViewImage)
textFieldLeadingTrailingViewFloating.trailingViewMode = .whileEditing
textFieldLeadingTrailingViewFloating.trailingView = UIImageView(image:trailingViewImage)
textFieldLeadingTrailingViewFloating.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(textFieldLeadingTrailingViewFloating)
textFieldLeadingTrailingViewFloating.delegate = self
textFieldLeadingTrailingViewFloating.clearButtonMode = .whileEditing
let textFieldControllerUnderlineLeadingTrailingViewFloating =
MDCTextInputControllerUnderline(textInput: textFieldLeadingTrailingViewFloating)
textFieldControllerUnderlineLeadingTrailingViewFloating.placeholderText =
"This has leading & trailing views and floats and a very long placeholder that should be truncated"
let textFieldBase = MDCTextField()
textFieldBase.delegate = self
textFieldBase.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(textFieldBase)
let textFieldControllerBase = MDCTextInputControllerBase(textInput: textFieldBase)
textFieldControllerBase.placeholderText = "This is the common base class for controllers"
textFieldControllerBase.helperText = "It's expected that you'll subclass this."
unstyledTextField.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(unstyledTextField)
unstyledTextField.placeholder = "This is an unstyled text field (no controller)"
unstyledTextField.leadingUnderlineLabel.text = "Leading label"
unstyledTextField.trailingUnderlineLabel.text = "Trailing label"
unstyledTextField.delegate = self
unstyledTextField.clearButtonMode = .whileEditing
unstyledTextField.leadingView = UIImageView(image: leadingViewImage)
unstyledTextField.leadingViewMode = .always
unstyledTextField.trailingView = UIImageView(image: trailingViewImage)
unstyledTextField.trailingViewMode = .always
return [textFieldControllerUnderlineDisabled,
textFieldControllerUnderlineCustomFont, textFieldControllerUnderlineCustomFontFloating,
textFieldControllerUnderlineLeadingView, textFieldControllerUnderlineLeadingViewFloating,
textFieldControllerUnderlineTrailingView, textFieldControllerUnderlineTrailingViewFloating,
textFieldControllerUnderlineLeadingTrailingView,
textFieldControllerUnderlineLeadingTrailingViewFloating,
textFieldControllerBase]
}
// MARK: - Multi-line
func setupAreaTextFields() -> [MDCTextInputControllerOutlinedTextArea] {
let textFieldArea = MDCMultilineTextField()
textFieldArea.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(textFieldArea)
textFieldArea.textView?.delegate = self
let textFieldControllerArea = MDCTextInputControllerOutlinedTextArea(textInput: textFieldArea)
textFieldControllerArea.placeholderText = "This is a text area"
return [textFieldControllerArea]
}
func setupUnderlineMultilineTextFields() -> [MDCTextInputControllerUnderline] {
let multilineTextFieldUnderline = MDCMultilineTextField()
multilineTextFieldUnderline.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(multilineTextFieldUnderline)
multilineTextFieldUnderline.textView?.delegate = self
let multilineTextFieldControllerUnderline =
MDCTextInputControllerUnderline(textInput: multilineTextFieldUnderline)
multilineTextFieldControllerUnderline.isFloatingEnabled = false
let multilineTextFieldUnderlinePlaceholder = MDCMultilineTextField()
multilineTextFieldUnderlinePlaceholder.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(multilineTextFieldUnderlinePlaceholder)
multilineTextFieldUnderlinePlaceholder.textView?.delegate = self
let multilineTextFieldControllerUnderlinePlaceholder =
MDCTextInputControllerUnderline(textInput: multilineTextFieldUnderlinePlaceholder)
multilineTextFieldControllerUnderlinePlaceholder.isFloatingEnabled = false
multilineTextFieldControllerUnderlinePlaceholder.placeholderText =
"This is a multi-line text field with placeholder"
let multilineTextFieldUnderlineCharMax = MDCMultilineTextField()
multilineTextFieldUnderlineCharMax.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(multilineTextFieldUnderlineCharMax)
multilineTextFieldUnderlineCharMax.textView?.delegate = self
let multilineTextFieldControllerUnderlineCharMax =
MDCTextInputControllerUnderline(textInput: multilineTextFieldUnderlineCharMax)
multilineTextFieldControllerUnderlineCharMax.characterCountMax = 140
multilineTextFieldControllerUnderlineCharMax.isFloatingEnabled = false
multilineTextFieldControllerUnderlineCharMax.placeholderText =
"This is a multi-line text field with placeholder"
controllersWithCharacterCount.append(multilineTextFieldControllerUnderlineCharMax)
return [multilineTextFieldControllerUnderline, multilineTextFieldControllerUnderlinePlaceholder,
multilineTextFieldControllerUnderlineCharMax]
}
func setupFullWidthMultilineTextFields() -> [MDCTextInputControllerFullWidth] {
let multilineTextFieldFullWidth = MDCMultilineTextField()
multilineTextFieldFullWidth.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(multilineTextFieldFullWidth)
multilineTextFieldFullWidth.textView?.delegate = self
let multilineTextFieldControllerFullWidth =
MDCTextInputControllerFullWidth(textInput: multilineTextFieldFullWidth)
multilineTextFieldControllerFullWidth.placeholderText =
"This is a full width multi-line text field"
let multilineTextFieldFullWidthCharMax = MDCMultilineTextField()
multilineTextFieldFullWidthCharMax.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(multilineTextFieldFullWidthCharMax)
multilineTextFieldFullWidthCharMax.textView?.delegate = self
let multilineTextFieldControllerFullWidthCharMax =
MDCTextInputControllerFullWidth(textInput: multilineTextFieldFullWidthCharMax)
multilineTextFieldControllerFullWidthCharMax.placeholderText =
"This is a full width multi-line text field with character count"
controllersWithCharacterCount.append(multilineTextFieldControllerFullWidthCharMax)
multilineTextFieldControllerFullWidthCharMax.characterCountMax = 140
return [multilineTextFieldControllerFullWidth, multilineTextFieldControllerFullWidthCharMax]
}
func setupFloatingMultilineTextFields() -> [MDCTextInputControllerUnderline] {
let multilineTextFieldFloating = MDCMultilineTextField()
multilineTextFieldFloating.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(multilineTextFieldFloating)
multilineTextFieldFloating.textView?.delegate = self
let multilineTextFieldControllerFloating =
MDCTextInputControllerUnderline(textInput: multilineTextFieldFloating)
multilineTextFieldControllerFloating.placeholderText =
"This is a multi-line text field with a floating placeholder"
let multilineTextFieldFloatingCharMax = MDCMultilineTextField()
multilineTextFieldFloatingCharMax.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(multilineTextFieldFloatingCharMax)
multilineTextFieldFloatingCharMax.textView?.delegate = self
let multilineTextFieldControllerFloatingCharMax =
MDCTextInputControllerUnderline(textInput: multilineTextFieldFloatingCharMax)
multilineTextFieldControllerFloatingCharMax.placeholderText =
"This is a multi-line text field with a floating placeholder and character count"
controllersWithCharacterCount.append(multilineTextFieldControllerFloatingCharMax)
return [multilineTextFieldControllerFloating, multilineTextFieldControllerFloatingCharMax]
}
func setupSpecialMultilineTextFields() -> [MDCTextInputController] {
let bundle = Bundle(for: TextFieldKitchenSinkSwiftExample.self)
let trailingViewImage = UIImage(named: "ic_done", in: bundle, compatibleWith: nil)!
let multilineTextFieldTrailingView = MDCMultilineTextField()
multilineTextFieldTrailingView.trailingViewMode = .always
multilineTextFieldTrailingView.trailingView = UIImageView(image:trailingViewImage)
multilineTextFieldTrailingView.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(multilineTextFieldTrailingView)
multilineTextFieldTrailingView.textView?.delegate = self
multilineTextFieldTrailingView.clearButtonMode = .whileEditing
let multilineTextFieldControllerUnderlineTrailingView =
MDCTextInputControllerUnderline(textInput: multilineTextFieldTrailingView)
multilineTextFieldControllerUnderlineTrailingView.isFloatingEnabled = false
multilineTextFieldControllerUnderlineTrailingView.placeholderText = "This has a trailing view"
let multilineTextFieldCustomFont = MDCMultilineTextField()
multilineTextFieldCustomFont.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(multilineTextFieldCustomFont)
let multilineTextFieldControllerUnderlineCustomFont =
MDCTextInputControllerUnderline(textInput: multilineTextFieldCustomFont)
multilineTextFieldControllerUnderlineCustomFont.placeholderText = "This has a custom font"
multilineTextFieldCustomFont.placeholderLabel.font = UIFont.preferredFont(forTextStyle: .headline)
multilineTextFieldCustomFont.font = UIFont.preferredFont(forTextStyle: .headline)
scrollView.addSubview(unstyledMultilineTextField)
unstyledMultilineTextField.translatesAutoresizingMaskIntoConstraints = false
unstyledMultilineTextField.placeholder =
"This multi-line text field has no controller (unstyled)"
unstyledMultilineTextField.leadingUnderlineLabel.text = "Leading label"
unstyledMultilineTextField.trailingUnderlineLabel.text = "Trailing label"
unstyledMultilineTextField.textView?.delegate = self
return [multilineTextFieldControllerUnderlineTrailingView,
multilineTextFieldControllerUnderlineCustomFont]
}
@objc func tapDidTouch(sender: Any) {
self.view.endEditing(true)
}
@objc func errorSwitchDidChange(errorSwitch: UISwitch) {
allInputControllers.forEach { controller in
if errorSwitch.isOn {
controller.setErrorText("Uh oh! Try something else.", errorAccessibilityValue: nil)
} else {
controller.setErrorText(nil, errorAccessibilityValue: nil)
}
}
}
@objc func helperSwitchDidChange(helperSwitch: UISwitch) {
allInputControllers.forEach { controller in
controller.helperText = helperSwitch.isOn ? "This is helper text." : nil
}
}
}
extension TextFieldKitchenSinkSwiftExample: UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return false
}
}
extension TextFieldKitchenSinkSwiftExample: UITextViewDelegate {
func textViewDidChange(_ textView: UITextView) {
print(textView.text)
}
}
extension TextFieldKitchenSinkSwiftExample {
@objc func contentSizeCategoryDidChange(notif: Notification) {
controlLabel.font = UIFont.preferredFont(forTextStyle: .headline)
singleLabel.font = UIFont.preferredFont(forTextStyle: .headline)
errorLabel.font = UIFont.preferredFont(forTextStyle: .subheadline)
helperLabel.font = UIFont.preferredFont(forTextStyle: .subheadline)
}
}