FUITextFieldCollectionViewCell
@MainActor
open class FUITextFieldCollectionViewCell : FUIInlineValidationDrawingCollectionViewCell<FUITextFieldContentView>, FUIFormCell
The reusable UI component implemented as a UICollectionViewCell to display or edit a textfield.
The developer should set the following properties on the cell in their implementation of the UITableViewDataSource cellForRow(at:) function:
keyName: The key name of the property.value: The value of the property.
And, an onChangeHandler:
onChangeHandler: a handler closure that is invoked on changes to the value.
Optionally, the developer may provide
isEditable: Indicates whether the cell’s value may be modified. The default istrue.isStacked: A Boolean value to determine whether the cell should use a stacked or linear layout. If the device’s accessibility settings font size is increased, the cell will force a stacked layout. By default, this property is set totrue.maxKeyWidth: The maximum width of the key with a linear layout. By default, the width is 115 for compact and 160 for regular. The set value must meet the minimum default threshold.alternativeInputButton: AnFUIButtonthat manages an alternative method to fill thetextField.isAlternativeInputEnabled: ABoolthat shows or hides thealternativeInputButton. This button will indicate whetherisAlternativeInputEnabledandisEditablearetrue.
Color settings:
Manage the color of the control by programmatically setting the textColor and tintColor.
The following is an example of usage in an application with UIViewController and UICollectionViewDataSource:
override func viewDidLoad() {
super.viewDidLoad()
self.collectionView.register(FUITextFieldCollectionViewCell.self, forCellReuseIdentifier: FUITextFieldCollectionViewCell.reuseIdentifier)
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: FUITextFieldCollectionViewCell.reuseIdentifier, for: indexPath) as! FUITextFieldCollectionViewCell
cell.keyName = "Editable"
cell.value = myObject.productName
// MARK: implement onChangeHandler
cell.onChangeHandler = { newValue in
myObject.productName = newValue
}
// MARK: Implement alternative input, i.e. use OCR to capture input
cell.isAlternativeInputEnabled = true
let inputImage = FUIIconLibrary.system.camera
cell.alternativeInputButton.setImage(inputImage.withRenderingMode(.alwaysTemplate), for: .normal)
cell.alternativeInputButton.didSelectHandler = { [weak self, weak cell] (button) in
//Import SAPML to use OCR capability
let textRecController = FUITextRecognitionViewController()
textRecController.recognitionView.observationHandler = { [unowned textRecController] observations in
let filteredObservations = <#filter out unwanted text#>
textRecController.recognitionView.showTexts(for: filteredObservations)
let areObservationsValid = <#filteredObservations meets desired criteria#>
if areObservationsValid {
DispatchQueue.main.async {
cell?.value = filteredObservations.map { $0.value }.joined(separator:" ")
}
return true
}
return false
}
textRecController.onClose = {
self?.dismiss(animated: true)
}
self?.present(UINavigationController(rootViewController: textRecController), animated: true)
}
return cell
}
## Theming
nuiClass:
fdlFUITextFieldFormCell {}
Supported TEXT class paths:
fdlFUITextFieldFormCell_keyText {}
fdlFUITextFieldFormCell_valueText {}
Supported TEXT properties:
font-color: Color;
placeholder-color: Color;
font-style: UIFontTextStyle;
Supported BUTTON class paths:
fdlFUITextFieldFormCell_alternativeInputButton {}
Supported BUTTON properties:
background-color: Color;
font-color: Color;
-
The key name of the property.
Declaration
Swift
@MainActor open var keyName: String? { get set } -
The
FUITextFieldholds the value string.Declaration
Swift
@MainActor open var valueTextField: FUITextField { get } -
A Boolean value to determine whether the cell should use a stacked or linear layout.
Declaration
Swift
@MainActor open var isStacked: Bool { get set } -
The maximum width of the key with a linear layout. By default, the width is 115 for compact and 160 for regular. The set value must meet the minimum default threshold.
Declaration
Swift
@MainActor open var maxKeyWidth: CGFloat { get set } -
Indicates whether the value of the cell can be changed or not. For
FUISimplePropertyFormCellthis property is alwaysfalse.Declaration
Swift
@MainActor open var isEditable: Bool { get set } -
A
Boolto enable alternative text entry. The cell must also haveisEditableset totrueto display the button. The button will be hidden while text entry is in progress. The default value isfalse.Declaration
Swift
@MainActor open var isAlternativeInputEnabled: Bool { get set } -
isEnabledandisEditableare in sync.Declaration
Swift
@MainActor open override var isEnabled: Bool { get set } -
This is the maximum length of the text if
maxTextLengthis greater than 0.If the text length reaches this limit when
isCharCountEnabledisfalse, the user cannot enter more text. Note: If the user pastes a string and the length plus the current text length is greater than the limit, the insert is rejected. Partial strings are not accepted in the text field.If the text length reaches this limit when
isCharCountEnabledistrue, the user cannot enter more text ifallowsBeyondLimitisfalse. In the case whereallowsBeyondLimitistrue, the user can enter more text beyond the limitation in the error state.The default value for
maxTextLengthis 0, which means no limit.Declaration
Swift
@MainActor public var maxTextLength: Int { get set } -
The value of the property.
Declaration
Swift
@MainActor open var value: String { get set } -
The error message when the character count limitation is reached.
Declaration
Swift
@MainActor public var charCountReachLimitMsg: String { get set } -
The error message when the character count exceeds the limitation.
Declaration
Swift
@MainActor public var charCountBeyondLimitMsg: String { get set } -
Implementation of the change handler. This is invoked on changes to the
valueproperty.Declaration
Swift
@MainActor open var onChangeHandler: ((String) -> Void)? { get set } -
The placeholder text for the value text field.
Declaration
Swift
@available(*, deprecated, message: "This property is deprecated. Please use `placeholder.text`.") @MainActor open var placeholderText: String? { get set } -
Method for determining the type of the presented keyboard.
Declaration
Swift
@MainActor open var keyboardType: UIKeyboardType { get set } -
The formatter for the
UITextFieldin this cell.Currently, SAPFiori provides two implementations:
FUIPhoneNumberFormatterto format phone numbers.FUINumberFormatterto format numbers that uses the regular iOSNumberFormatter.
Declaration
Swift
@MainActor open var formatter: FUIFormattedStringEditing? { get set } -
If
isTrackingLiveChanges == true, thenonChangeHandlerwill be invoked for every letter entered. Otherwise,onChangeHandlerwill be invoked only after the user taps the Done key, or the field resigns as first responder.The default value is
false.Declaration
Swift
@MainActor open var isTrackingLiveChanges: Bool { get set } -
The customized text alignment for the
valueTextField.If this property is
nil, the default alignment is used.- For left-to-right languages and the cell is
editable, the default is left-aligned. - For left-to-right languages and the cell is not
editable, the default is right-aligned. - For righ to left languages and the cell is
editable, the default is rignt aligned. - For right-to-left languages and the cell is not
editable, the default is left-aligned.
Declaration
Swift
@MainActor open var valueTextAlignment: NSTextAlignment? { get set } - For left-to-right languages and the cell is
-
The hint text.
Declaration
Swift
@MainActor open var hintText: String? { get set } -
Indicates whether the cell is read-only or not.
The default value is
false.Declaration
Swift
@MainActor open var isReadOnly: Bool { get set } -
Indicates whether the cell is a mandatory field.
The default value is
false.Declaration
Swift
@MainActor open var isRequired: Bool { get set } -
Indicates that the cell is a mandatory field.
The default value is
*.Declaration
Swift
@MainActor public var mandatoryIndicator: FUIText { get set } -
Indicates whether to hide the read-only hint or not.
A default hint is provided when this cell’s
isReadOnlyistrueunless this property istrue. The default isfalse, meaning that the default read-only hint will be shown whenisReadOnlyistrue.Declaration
Swift
@MainActor open var hidesReadOnlyHint: Bool { get set } -
Declaration
Swift
@MainActor public override var validationMessage: String? { get set } -
Style of
FUIInlineValidationViewDeclaration
Swift
@MainActor public override var inlineValidationStyle: FUIInlineValidationStyle { get set } -
Message type of
FUIInlineValidationView.Declaration
Swift
@MainActor public override var inlineValidationType: FUIInlineValidationType { get set } -
If
isCharCountEnabledis true, it will show the character count and themaxValueTextLength. The character count number will be updated during editing.The default value is
false.Declaration
Swift
@MainActor public var isCharCountEnabled: Bool { get set } -
If
showsErrorInValidationMsgistrue, it will show the character count error message in thevalidationMessageof theFUITextFieldFormCell. Otherwise, the error message will be shown in theerrorViewin the same layout as thehintView.The default is
true.Declaration
Swift
@MainActor public var showsErrorInValidationMsg: Bool { get set } -
If
allowsBeyondLimitistrue, it will allow the user to input continuously even aftermaxValueTextLengthis reached. It will be in an error state with an error message and a semantic negative color. IfallowsBeyondLimitisfalse, it will auto-stop user input whenmaxValueTextLengthis reached.The default value is
false.Declaration
Swift
@MainActor public var allowsBeyondLimit: Bool { get set } -
The error text.
Declaration
Swift
@MainActor open var errorText: String? { get set } -
If
hasErroristrue, it will be in an error state with an error message and a semantic negative color.The default value is
false.Declaration
Swift
@MainActor public var hasError: Bool { get set } -
A
Boolto indicate whether there is a character counting error. When it istrue, the input character count exceeds themaxTextLength.Declaration
Swift
@MainActor public var hasCharCountError: Bool { get }
-
Declaration
Swift
@MainActor override open func systemLayoutSizeFitting(_ targetSize: CGSize, withHorizontalFittingPriority horizontalFittingPriority: UILayoutPriority, verticalFittingPriority: UILayoutPriority) -> CGSize