UI Components
Your app's user interface and everything that users can see and interact with.
VGSLabel
A user interface element that displays any revealed text to the user.
VGSLabel configuration
Set contentPath
for VGSLabel
view as identifier for Reveal operations on Inbound routes. Check more details how to show revealed data here.
Code example
cardNumberLabel.contentPath = "<CONTENT_PATH_NAME_1>"
expDateLabel.contentPath = "<CONTENT_PATH_NAME_2>"
Set UI configurations for VGSLabel
view.
Code example
private func configureUI() {
let paddings = UIEdgeInsets.init(top: 8, left: 8, bottom: 8, right: 8)
let textColor = UIColor.white
let borderColor = UIColor.clear
let font = UIFont.systemFont(ofSize: 20)
let backgroundColor = UIColor.systemBlue
let cornerRadius: CGFloat = 0
let textAlignment = NSTextAlignment.left
let characterSpacing: CGFloat = 0.83
// Text color.
cardNumberLabel.textColor = textColor
// Paddings - should be non-negative!.
cardNumberLabel.paddings = paddings
// Border color.
cardNumberLabel.borderColor = borderColor
// Font.
cardNumberLabel.font = font
// Background color.
cardNumberLabel.backgroundColor = backgroundColor
// Corner radius.
cardNumberLabel.layer.cornerRadius = cornerRadius
// Text alignment.
cardNumberLabel.textAlignment = textAlignment
// Character spacing.
cardNumberLabel.characterSpacing = characterSpacing
}
Placeholder
You can setup placeholder for VGSLabel
. Placeholder is displayed in label when there is no revealed text to show. Placeholder style can be customized with placeholderStyle
property.
By default VGSLabel
placeholder has paddings from VGSLabel
text paddings
property. Custom placeholder paddings can be specified with placeholderPaddings
. Paddings should contain non-negative values. Negative paddings will be ignored.
private func configurePlaceholderUI() {
let paddings = UIEdgeInsets.init(top: 8, left: 8, bottom: 8, right: 8)
let color = UIColor.white.withAlphaComponent(0.6)
let font = UIFont.systemFont(ofSize: 16)
let textAlignment = NSTextAlignment.left
let characterSpacing: CGFloat = 0.83
// Placeholder text.
cardNumberLabel.placeholder = "Card number"
// Placeholder paddings. Should be non-negative!.
cardNumberLabel.placeholderPaddings = paddings
// Placeholder color.
cardNumberLabel.placeholderStyle.color = color
// Placeholder font.
cardNumberLabel.placeholderStyle.font = font
// Placehplder text alignment.
cardNumberLabel.placeholderStyle.textAlignment = textAlignment
// Placehplder character spacing.
cardNumberLabel.placeholderStyle.characterSpacing = characterSpacing
}
Data formatting
You have ability to format received data or value in VGSLabel
view. Use addTransformationRegex(_:)
to setup custom transformation NSRegularExpression
object and replacement template
for text formatting. Use try/catch
to validate your custom regular expression.
You can apply multiple
NSRegularExpression
objects for formatting. Final text will be a result of the subsequent transformations.\
Handle changes in VGSLabel
You can handle changes in VGSLabel
view setting its delegate
property to object implementing VGSLabelDelegate
protocol.
@objc
public protocol VGSLabelDelegate: class {
/// Tells the delegate when text changes in the specified label.
/// - Parameter label: `VGSLabel` view in which text was changed.
@objc optional func labelTextDidChange(_ label: VGSLabel)
/// Tells the delegate when raw text is copied in the specified label.
/// - Parameters:
/// - label: `VGSLabel` view in which raw text was copied.
/// - format: `VGSLabelCopyTextFormat` object, copied text format.
@objc optional func labelCopyTextDidFinish(_ label: VGSLabel, format: VGSLabel.CopyTextFormat)
/// Tells the delegate when reveal data operation was failed for the subscribed `VGSLabel` view.
/// - Parameter label: `VGSLabel` view in which reveal data operation was failed.
/// - Parameter error: `VGSShowError` object.
@objc optional func labelRevealDataDidFail(_ label: VGSLabel, error: VGSShowError)
}
Code example
extension ViewController: VGSLabelDelegate {
func labelTextDidChange(_ label: VGSLabel) {
/// Handle changes in label.
label.borderColor = UIColor.red
}
func labelCopyTextDidFinish(_ label: VGSLabel, format: VGSLabel.CopyTextFormat) {
/// Handle copy event.
print("Text was copied from label \(label) with format: \(format)")
}
func labelRevealDataDidFail(_ label: VGSLabel, error: VGSShowError) {
// Set label border to red color on error.
label.borderColor = .red
}
}
Secure text
VGS Show SDK provides you an option to secure text in VGSLabel. By secure we mean that you can optionally replace all or only some characters in revealed string by secure symbol. This works similar to "password mode" that you could see in UITextFields.
/// Enable/disable secure text mode in `VGSLabel`. Default is `false`.
public var isSecureText: Bool
/// Text symbol that replace visible label text character when securing String. Should be one charcter only. Default symbol - *.
public var secureTextSymbol: String
/// Set boundaries for secured text in `VGSLabel`. Boundaries always applied to visiblt text in `VGSLabel`.
/// - Parameters:
/// - start: `Int?` first boundaries index. If not set, will be replaced to 0.
/// - end: `Int?` last included boundaries index. If not set, will be replaced max index in visible text.
public func setSecureText(start: Int? = nil, end: Int? = nil)
/// Set range of boundaries for secured text in `VGSLabel`. Boundaries always applied to visiblt text in `VGSLabel`.
/// - Parameters:
/// - ranges: `[VGSTextRange]` an array of ranges where visible `VGSLabel` text should be secured.
public func setSecureText(ranges: [VGSTextRange])
• Secure text is applied to visible text in VGSLabel. You should take it into consideration you apply
tranformationRegex
to revealed data, ranges should be valid for modified string. • At the moment,secureTextSymbol
can be only one character symbol. • Inappropriate text ranges will be ignored. Inappropriate text ranges are range wherestart
>end
orstart
<0
.\
Copy text to clipboard
You can provide an option for your end-users to copy revealed text to the clipboard after the request. Use copyTextToClipboard(_:)
for VGSLabel to copy revealed text. The default option is .raw
to copy raw revealed text without applying any custom formatting. You can also use .transformed
the option to copy formatted text.
/// Copy text to pasteboard with format.
/// - Parameter format: `VGSLabel.CopyTextFormat` object, text format to copy. Default is `.raw`.
cardNumberLabel.copyTextToClipboard(format: .transformed)
Clear text
You have an option to clear text from VGSLabel
with clearText(_:)
function. Placeholder will be displayed in the label after clear text (if placeholder
is configured).
func resetScreenUI() {
cardNumberLabel.clearText()
}
After
clearText(_:)
newVGSShow
request will required to populate label with revealed data. Please use this method carefully.
VGSLabel Accessibility attributes
Attribute
Description
vgsAccessibilityLabel
String
instance, localized string to identify the accessibility label
vgsAccessibilityHint
String
instance, brief description of the result of performing an action on the accessibility label
vgsIsAccessibilityElement
Boolean
value, determinates if the label should be exposed as an accesibility element
VGSPDFView
A user interface element that displays a revealed PDF document to the user.
VGSPDFView
is available only from iOS 11 since it is built upon Apple PDFKit\
VGSPDFView configuration
Set contentPath
for VGSPDFView
view as an identifier for Reveal operations on Inbound routes. Check more details on how to show revealed data here.
Code example
pdfView.contentPath = "<CONTENT_PATH_NAME>"
Set UI configurations for VGSPDFView
instance.
private func configureUI() {
// Background color.
pdfView.backgroundColor = UIColor.gray
// Set display direction.
pdfView.pdfDisplayDirection = .horizontal
// Set page shadows.
pdfView.pageShadowsEnabled = true
}
Reveal PDF with VGSShowSDK
Revealing PDF files might take more time than for text data. Consider your PDF file size and specify an additional request timeout VGSShowRequestOptions
if needed. The maximum file size that can be sent to VGS is 24Mb.
@IBAction fileprivate func revealPdf(_ sender: UIButton) {
let payload: [String: Any] = ["customKey" : "customData"]
var options = VGSShowRequestOptions()
options.requestTimeoutInterval = 360
vgsShow.request(path: "/post", method: .post, payload: payload, requestOptions: options) {[weak self] result in
switch result {
case .success(let code):
print("success")
case .failure(let code, let error):
print("vgsshow failed, code: \(code), error: \(error)")
}
}
}
Revealing invalid base64 data or invalid pdf data will produce an error.
>
Handle changes in VGSPDFView
You can handle changes in VGSPDFView
view setting its delegate
property to the object implementing VGSPDFViewDelegate
protocol.
@available(iOS 11.0, *)
@objc
public protocol VGSPDFViewDelegate: class {
/// Tells the delegate the document was displayed in view.
/// - Parameter pdfView: `VGSPDFView` view in which document was changed.
/// Discussion.
/// A pdf view sends this message to its delegate just after it updated the document.
@objc optional func documentDidChange(in pdfView: VGSPDFView)
/// Tells the delegate when pdf view encounters an error.
/// - Parameter pdfView: `VGSPDFView` view in which error was occurred.
/// - Parameter error: `VGSShowError` object, contains error information.
@objc optional func pdfView(_ pdfView: VGSPDFView, didFailWithError error: VGSShowError)
}
Code example
extension ShowDemoPDFViewController: VGSPDFViewDelegate {
func documentDidChange(in pdfView: VGSPDFView) {
innerTitleLabel.text = "REVEALED"
}
func pdfView(_ pdfView: VGSPDFView, didFailWithError error: VGSShowError) {
print(error.localizedDescription ?? "uknown error")
}
}
VGSImageView
A user interface element that displays revealed images to the user.
Declaration
class VGSImageView: UIView, VGSImageViewProtocol
VGSImageView Functional attributes
Attribute
Description
imageContentMode
UIView.ContentMode
value, specifies how the image is rendered. Default to .scaleToFill
hasImage
read-only Boolean
value, determines if an image is being revealed or it is empty
contentPath
read-only String
instance, name associated with VGSImageView
to decode image data from your organization vault
delegate
VGSImageViewDelegate
object that will handle image reveal process
VGSImageView Functional functions
Function
Description
clear
Remove previously revealed image
VGSImageView configuration
Set contentPath
for VGSImageView
view as an identifier for Reveal operations on Inbound routes. Check more details on how to show revealed data here.
Handle changes in VGSImageView
You can handle changes in VGSImageView
view setting its delegate
property to the object implementing VGSImageViewDelegate
protocol.
@objc
public protocol VGSImageViewDelegate {
/// Tells the delegate the image was displayed in view.
/// - Parameter imageView: `VGSImageView` view in which image was changed.
@objc optional func imageDidChange(in imageView: VGSImageView)
/// Tells the delegate when image view encounters an error.
/// - Parameters:
/// - imageView: `VGSImageView` view in which error was occurred.
/// - error: `VGSShowError` object, contains error information.
@objc optional func imageView(_ imageView: VGSImageView, didFailWithError error: VGSShowError)
}
Code example
class ViewController {
// Create instances
var imageView = VGSImageView()
// ...
private func configureUI() {
// Subscribe to show SDK
vgsShow.subscribe(imageView)
// Configure content path
imageView.contentPath = "<CONTENT_PATH_NAME>"
// Set image display content mode
imageView.imageContentMode = .scaleAspectFit
// Set VGSImageViewDelegate to handle reveal events
imageView.delegate = self
// Background color.
imageView.backgroundColor = UIColor.gray
}
// ...
// Clear image content
imageView.clear()
// ...
}
/// Handle VGSImageViewDelegate methods
extension ViewController: VGSImageViewDelegate {
func imageDidChange(in imageView: VGSImageView) {
/// VGSImageView change image content
}
func imageView(_ imageView: VGSImageView, didFailWithError error: VGSShowError) {
/// Handle reveal image errors
}
}
Reveal image with VGSShowSDK
Revealing image files might take more time than for text data. Consider your image file size and specify additional request timeout with VGSShowRequestOptions
if needed. Max file size that can be sent to VGS is 24Mb.
@IBAction fileprivate func revealImage(_ sender: UIButton) {
let payload: [String: Any] = ["customKey": "customData"]
var options = VGSShowRequestOptions()
options.requestTimeoutInterval = 360
vgsShow.request(path: "/post", method: .post, payload: payload, requestOptions: options) {[weak self] result in
switch result {
case .success(let code):
print("success")
case .failure(let code, let error):
print("vgsshow failed, code: \(code), error: \(error)")
}
}
}
Revealing invalid base64 data or invalid image data will produce an error.
Last updated