current textview state
This commit is contained in:
parent
8141fa934f
commit
6e96be982b
@ -21,7 +21,8 @@ import UIKit
|
|||||||
/// Set to true to hide the blinking textField cursor.
|
/// Set to true to hide the blinking textField cursor.
|
||||||
public var hideBlinkingCaret = false
|
public var hideBlinkingCaret = false
|
||||||
|
|
||||||
weak var bottomLine: SeparatorView?
|
private var textTraits: (color: UIColor, font: UIFont) = (color: .mvmBlack, font: MFStyler.fontRegularBodySmall())
|
||||||
|
private var placeholderTraits: (color: UIColor, font: UIFont) = (color: .mvmCoolGray3, font: MFStyler.fontRegularMicro() )
|
||||||
|
|
||||||
public var placeholderFont: UIFont = MFStyler.fontRegularMicro() {
|
public var placeholderFont: UIFont = MFStyler.fontRegularMicro() {
|
||||||
didSet {
|
didSet {
|
||||||
@ -41,32 +42,19 @@ import UIKit
|
|||||||
|
|
||||||
public var placeholderTextColor: UIColor = .mvmCoolGray3
|
public var placeholderTextColor: UIColor = .mvmCoolGray3
|
||||||
|
|
||||||
public var displaysPlaceholder = false
|
public var showsPlaceholder = true
|
||||||
|
|
||||||
private(set) var textStore: String = ""
|
public var isShowingPlaceholder = true {
|
||||||
|
|
||||||
public override var text: String! {
|
|
||||||
didSet {
|
didSet {
|
||||||
if displaysPlaceholder && text.isEmpty {
|
textColor = isShowingPlaceholder ? placeholderTextColor : .mvmBlack
|
||||||
|
font = isShowingPlaceholder ? placeholderFont : textFont
|
||||||
|
if isShowingPlaceholder {
|
||||||
text = placeholder
|
text = placeholder
|
||||||
textColor = placeholderTextColor
|
|
||||||
} else {
|
|
||||||
textColor = .mvmBlack
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private(set) var textFont: UIFont = MFStyler.fontB2()!
|
private(set) var textFont: UIFont = MFStyler.fontRegularBodySmall()
|
||||||
|
|
||||||
public override var font: UIFont? {
|
|
||||||
didSet {
|
|
||||||
if displaysPlaceholder && text.isEmpty {
|
|
||||||
font = placeholderFont
|
|
||||||
} else {
|
|
||||||
textColor = .mvmBlack
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Delegate
|
// MARK: - Delegate
|
||||||
@ -75,10 +63,16 @@ import UIKit
|
|||||||
/// Holds a reference to the delegating class so this class can internally influence the TextField behavior as well.
|
/// Holds a reference to the delegating class so this class can internally influence the TextField behavior as well.
|
||||||
public weak var didDeleteDelegate: TextFieldDidDeleteProtocol?
|
public weak var didDeleteDelegate: TextFieldDidDeleteProtocol?
|
||||||
|
|
||||||
|
/// Holds a reference to the delegating class so this class can internally influence the TextField behavior as well.
|
||||||
|
private weak var proprietorTextDelegate: UITextViewDelegate?
|
||||||
|
|
||||||
/// If you're using a ViewController, you must set this to it
|
/// If you're using a ViewController, you must set this to it
|
||||||
public weak var uiTextViewDelegate: UITextViewDelegate? {
|
public weak var uiTextViewDelegate: UITextViewDelegate? {
|
||||||
get { return delegate }
|
get { return delegate }
|
||||||
set { delegate = newValue }
|
set {
|
||||||
|
delegate = self
|
||||||
|
proprietorTextDelegate = newValue
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
@ -108,7 +102,7 @@ import UIKit
|
|||||||
convenience init(placeholderText: String, delegate: UITextViewDelegate?) {
|
convenience init(placeholderText: String, delegate: UITextViewDelegate?) {
|
||||||
self.init(frame: .zero, textContainer: nil)
|
self.init(frame: .zero, textContainer: nil)
|
||||||
self.delegate = delegate
|
self.delegate = delegate
|
||||||
displaysPlaceholder = true
|
showsPlaceholder = true
|
||||||
self.placeholder = placeholderText
|
self.placeholder = placeholderText
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,10 +128,17 @@ import UIKit
|
|||||||
open override func deleteBackward() {
|
open override func deleteBackward() {
|
||||||
super.deleteBackward()
|
super.deleteBackward()
|
||||||
didDeleteDelegate?.textFieldDidDelete()
|
didDeleteDelegate?.textFieldDidDelete()
|
||||||
|
|
||||||
|
if isShowingPlaceholder {
|
||||||
|
text = ""
|
||||||
|
isShowingPlaceholder = false
|
||||||
|
} else if text.isEmpty {
|
||||||
|
isShowingPlaceholder = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Observing Methods
|
// MARK: - UITextViewDelegate
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
|
|
||||||
/// Executes on UITextView.textDidEndEditingNotification
|
/// Executes on UITextView.textDidEndEditingNotification
|
||||||
@ -149,32 +150,32 @@ import UIKit
|
|||||||
//#pragma Mark UITextView Delegate methods forwarding
|
//#pragma Mark UITextView Delegate methods forwarding
|
||||||
@objc public func textViewShouldBeginEditing(_ textView: UITextView) -> Bool {
|
@objc public func textViewShouldBeginEditing(_ textView: UITextView) -> Bool {
|
||||||
|
|
||||||
return delegate?.textViewShouldBeginEditing?(textView) ?? true
|
return proprietorTextDelegate?.textViewShouldBeginEditing?(textView) ?? true
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc public func textViewDidBeginEditing(_ textView: UITextView) {
|
@objc public func textViewDidBeginEditing(_ textView: UITextView) {
|
||||||
|
|
||||||
delegate?.textViewDidBeginEditing?(textView)
|
proprietorTextDelegate?.textViewDidBeginEditing?(textView)
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc public func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
|
@objc public func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
|
||||||
|
|
||||||
return delegate?.textView?(textView, shouldChangeTextIn: range, replacementText: text) ?? true
|
return proprietorTextDelegate?.textView?(textView, shouldChangeTextIn: range, replacementText: text) ?? true
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc public func textViewDidChange(_ textView: UITextView) {
|
@objc public func textViewDidChange(_ textView: UITextView) {
|
||||||
|
|
||||||
delegate?.textViewDidChange?(textView)
|
proprietorTextDelegate?.textViewDidChange?(textView)
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc public func textViewShouldEndEditing(_ textView: UITextView) -> Bool {
|
@objc public func textViewShouldEndEditing(_ textView: UITextView) -> Bool {
|
||||||
|
|
||||||
return delegate?.textViewShouldEndEditing?(textView) ?? true
|
return proprietorTextDelegate?.textViewShouldEndEditing?(textView) ?? true
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc public func textViewDidEndEditing(_ textView: UITextView) {
|
@objc public func textViewDidEndEditing(_ textView: UITextView) {
|
||||||
|
|
||||||
delegate?.textViewDidEndEditing?(textView)
|
proprietorTextDelegate?.textViewDidEndEditing?(textView)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -190,6 +191,7 @@ extension TextView: MVMCoreViewProtocol {
|
|||||||
insetsLayoutMarginsFromSafeArea = false
|
insetsLayoutMarginsFromSafeArea = false
|
||||||
showsVerticalScrollIndicator = false
|
showsVerticalScrollIndicator = false
|
||||||
showsHorizontalScrollIndicator = false
|
showsHorizontalScrollIndicator = false
|
||||||
|
backgroundColor = .clear
|
||||||
clipsToBounds = true
|
clipsToBounds = true
|
||||||
smartQuotesType = .no
|
smartQuotesType = .no
|
||||||
smartDashesType = .no
|
smartDashesType = .no
|
||||||
@ -221,10 +223,24 @@ extension TextView: MoleculeViewProtocol {
|
|||||||
isEditable = model.isEditable
|
isEditable = model.isEditable
|
||||||
textAlignment = model.textAlignment
|
textAlignment = model.textAlignment
|
||||||
textColor = model.textColor.uiColor
|
textColor = model.textColor.uiColor
|
||||||
|
layer.borderColor = model.borderColor?.cgColor
|
||||||
|
layer.borderWidth = model.borderWidth
|
||||||
|
|
||||||
|
// font = model.fontStyle
|
||||||
|
|
||||||
text = model.text
|
text = model.text
|
||||||
|
isShowingPlaceholder = model.text.isEmpty
|
||||||
placeholder = model.placeholder
|
placeholder = model.placeholder
|
||||||
|
// placeholderFont = model.placeholderFont
|
||||||
uiTextViewDelegate = delegateObject?.uiTextViewDelegate
|
uiTextViewDelegate = delegateObject?.uiTextViewDelegate
|
||||||
MVMCoreUICommonViewsUtility.addDismissToolbar(to: self, delegate: delegateObject?.uiTextViewDelegate)
|
|
||||||
|
if let accessibilityText = model.accessibilityText {
|
||||||
|
accessibilityLabel = accessibilityText
|
||||||
|
}
|
||||||
|
|
||||||
|
if isEditable {
|
||||||
|
MVMCoreUICommonViewsUtility.addDismissToolbar(to: self, delegate: delegateObject?.uiTextViewDelegate)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
open func reset() {
|
open func reset() {
|
||||||
|
|||||||
@ -19,12 +19,17 @@ open class TextViewModel: MoleculeModelProtocol {
|
|||||||
public var text: String = ""
|
public var text: String = ""
|
||||||
public var accessibilityText: String?
|
public var accessibilityText: String?
|
||||||
public var textColor: Color = Color(uiColor: .mvmBlack)
|
public var textColor: Color = Color(uiColor: .mvmBlack)
|
||||||
|
public var fontSize: CGFloat?
|
||||||
|
public var fontName: String?
|
||||||
public var fontStyle: LabelModel.FontStyle?
|
public var fontStyle: LabelModel.FontStyle?
|
||||||
public var textAlignment: NSTextAlignment = .left
|
public var textAlignment: NSTextAlignment = .left
|
||||||
public var height: CGFloat?
|
public var height: CGFloat?
|
||||||
public var placeholder: String = ""
|
public var placeholder: String = ""
|
||||||
public var placeholderFont: LabelModel.FontStyle = LabelModel.FontStyle.RegularMicro
|
public var placeholderFont: LabelModel.FontStyle = LabelModel.FontStyle.RegularMicro
|
||||||
public var isEditable: Bool = true
|
public var isEditable: Bool = true
|
||||||
|
public var borderColor: Color?
|
||||||
|
public var borderWidth: CGFloat = 0
|
||||||
|
public var showsPlaceholder: Bool = true
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Keys
|
// MARK: - Keys
|
||||||
@ -32,14 +37,18 @@ open class TextViewModel: MoleculeModelProtocol {
|
|||||||
|
|
||||||
private enum CodingKeys: String, CodingKey {
|
private enum CodingKeys: String, CodingKey {
|
||||||
case moleculeName
|
case moleculeName
|
||||||
|
case backgroundColor
|
||||||
case text
|
case text
|
||||||
case accessibilityText
|
case accessibilityText
|
||||||
case textColor
|
case textColor
|
||||||
case backgroundColor
|
|
||||||
case fontStyle
|
case fontStyle
|
||||||
|
case fontSize
|
||||||
|
case fontName
|
||||||
case textAlignment
|
case textAlignment
|
||||||
case attributes
|
case attributes
|
||||||
case height
|
case height
|
||||||
|
case borderColor
|
||||||
|
case borderWidth
|
||||||
case placeholder
|
case placeholder
|
||||||
case placeholderFont
|
case placeholderFont
|
||||||
case isEditable
|
case isEditable
|
||||||
@ -68,9 +77,8 @@ open class TextViewModel: MoleculeModelProtocol {
|
|||||||
self.placeholder = placeholder
|
self.placeholder = placeholder
|
||||||
}
|
}
|
||||||
|
|
||||||
if let placeholderFont = try typeContainer.decodeIfPresent(String.self, forKey: .placeholderFont),
|
if let placeholderFont = try typeContainer.decodeIfPresent(LabelModel.FontStyle.self, forKey: .placeholderFont) {
|
||||||
let font = LabelModel.FontStyle(rawValue: placeholderFont) {
|
self.placeholderFont = placeholderFont
|
||||||
self.placeholderFont = font
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if let textAlignment = try typeContainer.decodeIfPresent(NSTextAlignment.self, forKey: .textAlignment) {
|
if let textAlignment = try typeContainer.decodeIfPresent(NSTextAlignment.self, forKey: .textAlignment) {
|
||||||
@ -85,8 +93,15 @@ open class TextViewModel: MoleculeModelProtocol {
|
|||||||
self.isEditable = isEditable
|
self.isEditable = isEditable
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let borderWidth = try typeContainer.decodeIfPresent(CGFloat.self, forKey: .borderWidth) {
|
||||||
|
self.borderWidth = borderWidth
|
||||||
|
}
|
||||||
|
|
||||||
|
borderColor = try typeContainer.decodeIfPresent(Color.self, forKey: .borderColor)
|
||||||
accessibilityText = try typeContainer.decodeIfPresent(String.self, forKey: .accessibilityText)
|
accessibilityText = try typeContainer.decodeIfPresent(String.self, forKey: .accessibilityText)
|
||||||
backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor)
|
backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor)
|
||||||
|
fontSize = try typeContainer.decodeIfPresent(CGFloat.self, forKey: .accessibilityText)
|
||||||
|
fontName = try typeContainer.decodeIfPresent(String.self, forKey: .accessibilityText)
|
||||||
fontStyle = try typeContainer.decodeIfPresent(LabelModel.FontStyle.self, forKey: .fontStyle)
|
fontStyle = try typeContainer.decodeIfPresent(LabelModel.FontStyle.self, forKey: .fontStyle)
|
||||||
height = try typeContainer.decodeIfPresent(CGFloat.self, forKey: .height)
|
height = try typeContainer.decodeIfPresent(CGFloat.self, forKey: .height)
|
||||||
}
|
}
|
||||||
@ -94,15 +109,19 @@ open class TextViewModel: MoleculeModelProtocol {
|
|||||||
public func encode(to encoder: Encoder) throws {
|
public func encode(to encoder: Encoder) throws {
|
||||||
var container = encoder.container(keyedBy: CodingKeys.self)
|
var container = encoder.container(keyedBy: CodingKeys.self)
|
||||||
try container.encodeIfPresent(moleculeName, forKey: .moleculeName)
|
try container.encodeIfPresent(moleculeName, forKey: .moleculeName)
|
||||||
|
try container.encodeIfPresent(backgroundColor, forKey: .backgroundColor)
|
||||||
|
try container.encodeIfPresent(accessibilityText, forKey: .accessibilityText)
|
||||||
|
try container.encodeIfPresent(textColor, forKey: .textColor)
|
||||||
|
try container.encodeIfPresent(fontStyle, forKey: .fontStyle)
|
||||||
|
try container.encodeIfPresent(height, forKey: .height)
|
||||||
|
try container.encodeIfPresent(borderColor, forKey: .borderColor)
|
||||||
|
try container.encodeIfPresent(fontSize, forKey: .fontSize)
|
||||||
|
try container.encodeIfPresent(fontName, forKey: .fontName)
|
||||||
try container.encode(text, forKey: .text)
|
try container.encode(text, forKey: .text)
|
||||||
try container.encode(placeholder, forKey: .placeholder)
|
try container.encode(placeholder, forKey: .placeholder)
|
||||||
try container.encode(placeholderFont, forKey: .placeholderFont)
|
try container.encode(placeholderFont, forKey: .placeholderFont)
|
||||||
try container.encodeIfPresent(accessibilityText, forKey: .accessibilityText)
|
|
||||||
try container.encodeIfPresent(textColor, forKey: .textColor)
|
|
||||||
try container.encodeIfPresent(backgroundColor, forKey: .backgroundColor)
|
|
||||||
try container.encodeIfPresent(fontStyle, forKey: .fontStyle)
|
|
||||||
try container.encode(textAlignment, forKey: .textAlignment)
|
try container.encode(textAlignment, forKey: .textAlignment)
|
||||||
try container.encodeIfPresent(height, forKey: .height)
|
|
||||||
try container.encode(isEditable, forKey: .isEditable)
|
try container.encode(isEditable, forKey: .isEditable)
|
||||||
|
try container.encode(borderWidth, forKey: .borderWidth)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user